Совершенно новый для С++.
Я сравниваю различные аспекты C++, C# и Ruby, чтобы понять, есть ли необходимость в зеркалировании библиотеки. В настоящее время простое чтение файла (после обновления).
Компиляция С++ и С# в VS 2017. С++ находится в режиме выпуска (x64) (или, по крайней мере, компилируется, а затем запускается)
Библиотеки более или менее читают файл и разбивают строки на три, которые составляют элементы объекта, которые затем сохраняются в элементе массива.
Для стресс-тестирования я попробовал большой файл размером 380 МБ (7 млн строк) (после обновления), теперь получая аналогичную производительность с C++ и Ruby,
Чисто читая файл и ничего не делая, производительность выглядит следующим образом:
Ruby: 7s
C#: 2.5s
C++: 500+s (stopped running after awhile, something's clearly wrong)
C++(release build x64): 7.5s
Код:
#Ruby
file = File.open "test_file.txt"
while !file.eof
line = file.readline
end
//C#
StreamReader file = new StreamReader("test_file.txt");
file.Open();
while((line = file.ReadLine()) != null){
}
//C++
#include "stdafx.h"
#include "string"
#include "iostream"
#include "ctime"
#include "fstream"
int main()
{
std::ios::sync_with_stdio(false);
std::ifstream file;
file.open("c:/sandboxCPP/test_file.txt");
std::string line;
std::clock_t start;
double duration;
start = std::clock();
while (std::getline(file, line)) {
}
duration = (std::clock() - start) / (double)CLOCKS_PER_SEC;
std::cout << "\nDuration: " << duration;
while (true)
{
}
return 0;
}
Изменить: следующее работало невероятно хорошо. 0,03 с
vector<string> lines;
string tempString = str.str();
boost::split(lines, tempString, boost::is_any_of("\n"));
start = clock();
cout << "\nCount: " << lines.size();
int count = lines.size();
string s;
for (int i = 0; i < count; i++) {
s = lines[i];
}
s =
на вероятность того, что я не знаю, что делает повышение. Изменена производительность.
Протестировано с помощью cout случайной записи в конце цикла.
Спасибо
std::ios::sync_with_stdio(false);
туда и посмотрите, ускоряется ли он. резко вверх. - person Fred Larson   schedule 06.01.2018c++
неправильно обрабатываетi
. Я не вижу увеличения. Также вы должны использовать std::chrono для синхронизации. - person drescherjm   schedule 06.01.2018std::ios::sync_with_stdio(false);
в коде? - person user4581301   schedule 06.01.2018i
; он никогда не будет печатать, даже если он читает файл. - person Daniel H   schedule 06.01.2018#include <iostream>
,int main
и т. д. - person Daniel H   schedule 06.01.2018duration = std::clock() - start / (double)CLOCKS_PER_SEC;
Должно бытьduration = (std::clock() - start) / (double)CLOCKS_PER_SEC;
. - person Fred Larson   schedule 06.01.2018clock_t
напрямую). Пора ложиться спать, если я сразу не обнаружу проблему с приоритетом операторов. ;-) - person DevSolar   schedule 06.01.2018-O3
)... - person DevSolar   schedule 06.01.2018