Re[4]: C# generics: Тормоза. Что я не так делаю?
От: Денис Федин Россия  
Дата: 14.01.05 15:42
Оценка: +1 -1
Добрый день!
Уважаемый Павел Кузнецов, я знаю что вы профессионал, но высказывание типа: "вот это тормозит в 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" как на локальном так и на глобальном уровне, что позволяет писать при надобности свои менеджеры дин. памяти, а не использовать встроенные в систему.
Но вопрос в том кто это делает?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.