
Сообщение от
Дм. Журко
Откуда взяли разы? Испытывали?
Да, испытывал. И не только я - ссылку приводил выше. Сомневаетесь в результатах? Опровергните.
Пытаетесь спорить с тем, кто испытывал? Скорость C# иногда выше кодогенератора Visual C++ и никогда не бывала хуже в разы.
Приведите код, посмотрим. Я привел ссылку, там код и числа. Вы не привели ничего.
Впрочем, если рассматривать "сфероконя в вакууме" - голый цикл с суммированием чисел - производительность дествительно сравнимая, у C# чуть-чуть выше, это я тоже проверял. Только как обычно бывает, в реальном приложении картина совсем другая. Чуть ниже тестовый код и результаты.
Я предлагаю писать на том, что более эффективно.
C++ безнадёжно устарел, новый код на нём писать -- ошибка управления проектом.
Дмитрий, а Вы сами-то хоть одним проектом управляли, сложнее драйвера для портов?
То есть Вы это всё написали?
Не все, только номер 2 - движок для онлайн-казино, в составе команды из 3х человек. Название компании-заказчика привести не могу, по вполне понятной причине.
Писали на C++, поскольку заказчик предъявил определенные требования к производительности. На C# выполнить эти требования было бы невозможно.
И мне пофиг, сколько лет C# - если бы задачу можно было выполнить на нем, я бы так и сделал. Но это не всегда возможно.
Сами идите и найдите свои «4 раза». Найдёте -- приведите
Уже нашел. Облегчу Вам задачу и приведу ссылку еще раз: http://www.kbcafe.com/articles/CSharp.Performance.pdf
Впрочем, там не везде в 4 раза, целочисленные вычисления - только в 2.
Приведу еще и свой тест:
Код:
//////////////////////////////////////////////
// C++
//////////////////////////////////////////////
class Storage
{
public:
Storage( void ): _val(0) {}
Storage( const double val ): _val(val) {}
double get_val( void ) const
{
return _val;
}
void set_val( const double val )
{
_val = val;
}
private:
double _val;
};
class Calculator
{
public:
Calculator( void ) {}
void calc( Storage & s, const Storage &a, const Storage &b )
{
s.set_val( a.get_val() + b.get_val() );
}
};
class Runner
{
public:
Runner( void ) {}
Storage run( Storage &a, Storage &b )
{
unsigned int i;
Calculator calc;
for (i = 0; i < 1000000000; i++)
{
calc.calc(a, a, b);
}
return a;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Runner r;
Storage a(0.1);
Storage b(0.2);
unsigned int ticks = GetTickCount();
printf("C++ test...\n");
a = r.run(a, b);
ticks = GetTickCount() - ticks;
printf("%lf, %d\n", a.get_val(), ticks);
return 0;
}
//////////////////////////////////////////////
// C#
//////////////////////////////////////////////
namespace csharp_test
{
class Storage
{
private double _val;
public Storage()
{
_val = 0;
}
public Storage(double val)
{
set_val(val);
}
public void set_val(double val)
{
_val = val;
}
public double get_val()
{
return _val;
}
}
class Calculator
{
public Calculator() {}
public void calc(Storage s, Storage a, Storage b)
{
s.set_val(a.get_val() + b.get_val());
}
}
class Runner
{
public Runner() {}
public Storage Run(Storage a, Storage b)
{
Calculator calc = new Calculator();
for (int i = 0; i < 1000000000; i++)
{
calc.calc(a, a, b);
}
return a;
}
}
class Program
{
static void Main(string[] args)
{
Storage a = new Storage(0.1);
Storage b = new Storage(0.2);
Runner r = new Runner();
long ticks = DateTime.Now.Ticks;
Console.WriteLine("C# test...\n");
a = r.Run(a, b);
ticks = ( DateTime.Now.Ticks - ticks ) / 10000;
Console.WriteLine("{0}, {1}", a.get_val(), ticks);
}
}
}
И результат:
C++ - 2781 тиков
C# - 11906 тиков
Более чем в 4 раза.
Скрин с результатом на всякий случай приаттачил.
Хотя я не спец по шарпу, возможно что-то упустил.
Да, и небольшое замечание по поводу кода. Можно было бы обойтись структурами (для Storage например), но поскольку мы обсуждаем большие и сложные программы, нас интересует работа с классами в первую очередь.
и можете продолжить писать глупости.
Хамство Вам не к лицу.
Мне вопрос? У них и спросите. Впрочем, пишут и на C#, распространённые 3D engine из него доступны.
Найдите хоть один _технологичный_ и _производительный_ 3D движок _полностью_ на C#. Сравнимый с другими хорошими движками, такими как Unreal Engine или движок Crysis.
Сам использовал для графики (крывых, шкал, схем) _только_ Direct3D, так красивее, а не потому что нужна была трёхмерность, подвижность и освещение.
При чем тут шкалы и схемы? Вас про игры спрашивают, причем про _современные_ _технологичные_ игры.
P.S. вот еще ссылки:
http://www.rsdn.ru/forum/message/543729.flat.aspx
http://www.garret.ru/~knizhnik/dybas...tml#comparison