Добрый день!
Уважаемый Павел Кузнецов, я знаю что вы профессионал, но высказывание типа: "вот это тормозит в 2 раза" очень некорректно, и очень далеко от истины, чтобы языку присваивать клеймо — "в 2 раза медленней!".
(Особенно было смешно про видео-плейер.)
Наберите в C# код:
for(int i = 0; i < 10000000; i++)
{
string s = "123456789012345678901234567890";
s += "1";
}
и наберите в C++ тот же самый код с использованием любого класса типа string.
Вы скорее всего предпочтете std::string.
for(int i = 0; i < 100000000; i++)
{
std::string s = "123456789012345678901234567890";
s += "1";
}
Теперь скомпилируйте в release и сравните.
Я использовал:
MS VS C++ 7.0 и MS VS C#.
На моей машине Cel2500 такие показатели:
C++ — 46 сек.
C# — 18 сек.
Тогда я могу сделать однозначный вывод по поводу производительности?
Конечно, нет. Где-то быстрее, а где-то медленнее. Линейной и тем-более константной зависимости тут нет, и быть не может, Вы как профессионал должны это понимать.
Ясно одно, что в достаточно крупных приложениях очень часто используется дин. память, поэтому в словах Влада истина в том, что зачастую при миграции более менее крупного проекта с C++ на C# заметно повышение производительности на глаз.
Вообще суть то не в самом C#, а в dotNET, т.к. сборщик мусора включает в себя "грамотный" диспетчер дин. памяти, а отсюда и выигрыш в конечной производительности.
Страуструп очень умный человек и позволил переопределять оператор "new" как на локальном так и на глобальном уровне, что позволяет писать при надобности свои менеджеры дин. памяти, а не использовать встроенные в систему.
Но вопрос в том кто это делает?