2016-03-01 2 views
0

Я надеялся получить какие-то разъяснения относительно времени выполнения моего решения сообщества MSVS2015.Как включить влияет время выполнения на C++?

В основном я сделал довольно простое приложение, которое использует libcurl для получения исторических данных из файла CSV из yahoo finance. Данные с 2010 по 2016 год, сбрасываются в файл csv в папке решения.

Причина, по которой я поднимаю этот вопрос, заключается в том, что, поскольку я изменил решение, просто используя единственный .cpp, выполняющий все, чтобы создавать новые .cpp-файлы, чтобы в основном сделать код более удобным для обслуживания, время выполнения от 1 секунды до около 3 секунд. Это мой первый опыт работы с несколькими файлами .cpp и .h, поэтому у меня очень ограниченный опыт в том, как включение их может повлиять на время выполнения.

Итерировать по вопросу; он действительно работает нормально - я просто хочу понять, как время выполнения может быть намного дольше при внесении таких простых изменений.

Вот код:

historical.cpp

#include "stdafx.h" 
#include "historical.h" 


using namespace std; 

static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) 
{ 
    ((std::string*)userp)->append((char*)contents, size * nmemb); 
    return size * nmemb; 
} 


historical::historical(string symbol) { 
    _mQueryString = "http://ichart.yahoo.com/table.csv?s=" + symbol + "&a=00&b=01&c=2010&d=01&e=01&f=2016&d=m&ignore=.csv"; // setup the query by adding the string param. (2010-2016). 

    CURL *curl; // initialize cURL 
    CURLcode res; // setup a response 

    curl = curl_easy_init(); 
    if (curl) { 
     curl_easy_setopt(curl, CURLOPT_URL, _mQueryString); 
     curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); 
     curl_easy_setopt(curl, CURLOPT_WRITEDATA, &_mHistorical); 
     res = curl_easy_perform(curl); 
     curl_easy_cleanup(curl); 


     string* pBuffer = &_mHistorical; 
    } 
} 

string* historical::getHistorical() { 
    return &_mHistorical; 
} 
historical::~historical() { 
    cout << "The object is deleted"; 
} 

historical.h

#pragma once 

//====================== 
//include guard 
#ifndef __HISTORICAL_H_INCLUDED__ 
#define __HISTORICAL_H_INCLUDED__ 

//====================== 
// forward declared dependencies 

//====================== 
// included dependencies:: 
#include <iostream> 
#include <fstream> 
#include <stdio.h> 
#include <curl/curl.h> 
#include <string> 

//====================== 
// historical:: 

using namespace std; 
class historical { 
public: 
    historical(string symbol); 
    string* getHistorical(); 
    ~historical(); 
private: 
    string _mHistorical; 
    string _mQueryString; 
}; 


#endif 

geostocks.cpp (в том числе основной())

// geostocks.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
#include <iostream> 
#include <fstream> 
#include <stdio.h> 
#include <curl/curl.h> 
#include <string> 
#include "historical.h" 
using namespace std; 

void writer(string* pInput); 

static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) 
{ 
    ((std::string*)userp)->append((char*)contents, size * nmemb); 
    return size * nmemb; 
} 



int main(void) 
{ 
    historical his("AAPL"); 
    string output; 

    output = *his.getHistorical(); 
    writer(&output); 

    return 0; 
} 

void writer(string* pInput) { 
    ofstream mf("test.csv"); 
    if (mf.is_open()) { 
     mf << *pInput; 
     mf.close(); 
    } 
    else cout << "Unable to open file" << endl; 
} 
+0

Ваше время приложения кажется действительно зависящим от времени HTTP-запросов, что не является самым предсказуемым для синхронизации. – Jarod42

+0

Вы по существу измеряете, сколько времени требуется для загрузки данных (и для сервера для его подготовки), и можно ожидать нескольких секунд. – molbdnilo

+0

См., Я понимаю, что могут быть варианты того, сколько времени потребуется серверу для обработки и подготовки данных из HTTP-запроса. Однако не кажется ли несколько маловероятным, чтобы запрос (два идентичных запроса) выполнял разную длину выполнения? Я повторно запускаю оба решения, и это «разделенное» решение занимает 3-4 секунды, тогда как неделимое занимает менее 1 секунды для выполнения. – geostocker

ответ

2

не в любом случае.

Ваши замечания далеки от скорее из-за сетевого HTTP-запроса, не так ли?

+0

Это были бы мои мысли точно. Тем не менее, запрос, ответ и письмо занимают 3-5 секунд дольше, когда я «разделял» исходный файл .cpp, чтобы сделать его более управляемым ... – geostocker

+0

@geostocker: Нет, это совпадение. –

+0

это не похоже на совпадение. Просто запустил его еще раз, включив ctime. Не будучи «разделенным», потребовалось менее одной секунды. Если бы это было «разделено», это заняло между 4-5 секундами. – geostocker

2

Когда вы включаете файл, .cpp или .h, содержимое файла просто копируется в файл включения в процессе подготовки к фазе компиляции.

Директивы препроцессора - это в основном текстовые операции, которые не должны влиять на скорость выполнения программы.

Как вы уже упоминали, разделение кода на файлы реализации и интерфейса помогает с поддержкой кода.

1

Способ разделения/организации кода не влияет на время работы исполняемого файла.

Смежные вопросы