c # на словарь c ++ к результатам unordered_map

Я уже несколько лет изучал C # и пытаюсь научиться чему-то новому. Поэтому я решил взглянуть на c ++,чтобы познакомиться с программированием другим способом.

Я много читал, но только сегодня начал писать код.

На моей машине с Windows 7/64 бит, работающей под управлением VS2010, я создал два проекта : 1) Проект C #, который позволяет мне писать так, как я привык. 2) Проект "makefile" на C ++, который позволяет мне поиграть, пытаясь реализовать то же самое. Насколько я понимаю, это НЕ проект .NET.

Мне пришлось попытаться заполнить словарь 10К значениями. По какой-то причине C ++ работает на несколько порядков медленнее.

Вот C # ниже. Обратите внимание, что я добавил функцию после измерения времени, чтобы убедиться, что она не была «оптимизирована» компилятором:

var freq = System.Diagnostics.Stopwatch.Frequency;

int i;
Dictionary dict = new Dictionary();
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

Вот c ++ , на него не было особо много размышлений (пытаясь научиться, верно?) 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 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

Теперь несколько предостережений. Мне удалось найти этот связанный вопрос SO. Один из парней написал длинный ответ, в котором упомянул, что WOW64 искажает результаты. Я настроил проект на выпуск и просмотрел вкладку «Свойства» проекта c ++, включив все, что звучало так, как будто это сделает его быстрым. Сменил платформу на x64, хотя я не уверен, решит ли это его проблему с wow64. Я не очень разбираюсь в параметрах компилятора, может быть, вы, ребята, больше понимаете?

Да, и результаты: c #: 0,32 мс c ++: 8,26 мс. Это немного странно. Я что-то неправильно понял, что означает .Quad? Я скопировал код таймера C ++ откуда-то в Интернете, выполнил всю установку ускорения и включил / 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: queue

Любая помощь приветствуется, спасибо.

10
задан Community 23 May 2017 в 10:30
поделиться