Re[48]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 19:56
Оценка: :))) :)
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, gandjustas, Вы писали:


G>>Но ты не забывай что GC не требуется проходи по списку на каждое выделение-освобождение.


E>Это никому не требуется, кроме древних-предревних кучь...


Ну давайте чтобы не быть голословным приведу код:
На c++
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
    DWORD ticks = GetTickCount();

    for(int i=0; i<1000000; i++)
    {        
        int* arr = new int[64];
        delete [] arr;
    }

    printf("%d", GetTickCount() - ticks);
    getchar();
    return 0;
}


На C#
static void Main(string[] args)
{
    var sw = new System.Diagnostics.Stopwatch();
    sw.Start();

    for (int i = 0; i < 1000000; i++)
    {
        var arr = new int[64];
        arr[0] = arr[1]; //иначе оптимизатор грохает цикл
    }
    GC.Collect();//чтобы быть уверенным что вся память освободилась

    Console.WriteLine(sw.ElapsedMilliseconds);
    Console.ReadKey();
}


Собиралось 2008 студией, релиз, запуск из проводника.
C++ — 562 мсек, C# — 92 мсек.

Стоит учесть что каждый проход GC в программе на C# очищает вс первое поколение в таком случа и двигание объектов не происходит, то немного исправляет результат в пользу C#, но даже если бы код на C# работал в 2 раза медленее, то он оказался бы в 3 раза быстрее стандартного аллокатора для C++.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.