Я уже несколько лет занимаюсь c # и пытаюсь выучить что-то новое. Поэтому я решил взглянуть на c ++, чтобы познакомиться с программированием по-другому.
Я много читал, но сегодня начал писать код.
На моем компьютере с Windows 7/64, работающем под VS2010, я создал два проекта:
1) C # проект, который позволяет мне писать вещи, как я привык.
2) c ++ "makefile" проект, который позволяет мне поиграть, пытаясь реализовать то же самое. Насколько я понимаю, это не проект .NET.
Я пытался заполнить словарь значениями 10К. По какой-то причине c ++ работает на несколько порядков медленнее.
Вот c # ниже. Примечание Я добавил функцию после измерения времени, чтобы компилятор не «оптимизировал» его:
var freq = System.Diagnostics.Stopwatch.Frequency;
int i;
Dictionary<int, int> dict = new Dictionary<int, int>();
var clock = System.Diagnostics.Stopwatch.StartNew();
for (i = 0; i < 10000; i++)
dict[i] = i;
clock.Stop();
Console.WriteLine(clock.ElapsedTicks / (decimal)freq * 1000M);
Console.WriteLine(dict.Average(x=>x.Value));
Console.ReadKey(); //Don't want results to vanish off screen
Вот с ++ , в него не особо задумывались (пытаясь учиться, верно?)
int input;
LARGE_INTEGER frequency; // ticks per second
LARGE_INTEGER t1, t2; // ticks
double elapsedTime;
// get ticks per second
QueryPerformanceFrequency(&frequency);
int i;
boost::unordered_map<int, int> dict;
// start timer
QueryPerformanceCounter(&t1);
for (i=0;i<10000;i++)
dict[i]=i;
// stop timer
QueryPerformanceCounter(&t2);
// compute and print the elapsed time in millisec
elapsedTime = (t2.QuadPart - t1.QuadPart) * 1000.0 / frequency.QuadPart;
cout << elapsedTime << " ms insert time\n";
int input;
cin >> input; //don't want console to disappear
Теперь несколько предостережений. Мне удалось найти связанный с этим вопрос. Один из парней написал длинный ответ, упомянув, что WOW64 искажает результаты. Я настроил проект на выпуск и прошел через вкладку «свойства» проекта c ++, включив все, что звучало так, как это, сделает его быстрым. Изменил платформу на x64, хотя я не уверен, решает ли это его проблему с wow64. Я не настолько опытен с опциями компилятора, может, вы, ребята, больше разбираетесь в этом?
Да, и результаты: c #: 0,32 мс C ++: 8,26 мс. Это немного странно. Я что-то неправильно истолковал о том, что означает .Quad? Я скопировал код таймера c ++ из какого-то места в сети, прошел все установки boost и включил / libfile rigmarole. Или, может быть, я невольно использую разные инструменты? Или есть какой-то критический вариант компиляции, который я не использовал? Или, может быть, код C # оптимизирован, потому что среднее значение является константой?
Вот командная строка c ++, со страницы свойств-> C / C ++ -> Командная строка:
/ I "C: \ Users \ Carlos \ Desktop \ boost_1_47_0" / Zi / nologo / W3 / WX- / MP / Ox / Oi / Ot / GL / D "_MBCS" / Gm- / EHsc / GS- / Gy- / arch: SSE2 / fp: fast / Zc: wchar_t / Zc: forScope /Fp"x64\Release\MakeTest.pch "/ Fa" x64 \ Release \ "/ Fo" x64 \ Release \ "/ Fd" x64 \ Release \ vc100 .pdb "/ Gd / errorReport: очередь
Любая помощь будет оценена, спасибо.