Я думал о разнице в скорости C ++ и C # в основном из-за компиляции C # в байт-код, который принимается JIT-компилятором (это правильно?) И всех проверок, выполняемых C #.
Я заметил, что многие из этих функций можно отключить как в параметрах компиляции, так и, возможно, с помощью ключевого слова unsafe
, поскольку небезопасный код не может быть проверен общеязыковой средой выполнения.
Поэтому, если бы вы написали простое консольное приложение на обоих языках, которое подбрасывало бы воображаемую монету бесконечное число раз и отображало результаты на экране каждые 10 000 или около того итераций, какая разница в скорости была бы? Я выбрал это, потому что это очень простая программа.
Я хотел бы проверить это, но я не знаю C ++ или не имею инструментов для его компиляции. Это моя версия на C #:
static void Main(string[] args)
{
unsafe
{
Random rnd = new Random();
int heads = 0, tails = 0;
while (true)
{
if (rnd.NextDouble() > 0.5)
heads++;
else
tails++;
if ((heads + tails) % 1000000 == 0)
Console.WriteLine("Heads: {0} Tails: {1}", heads, tails);
}
}
}
Достаточно ли разницы для того, чтобы гарантировать преднамеренную компиляцию фрагментов кода "небезопасно" или в библиотеки DLL, в которых не включены некоторые параметры компиляции, такие как проверка переполнения? Или все идет иначе, где было бы полезно компилировать разделы в C ++? Я уверен, что скорость взаимодействия тоже вступит в игру.
Чтобы избежать субъективности, я повторяю конкретные части этого вопроса как:
- Есть ли в C # повышение производительности от использования небезопасного кода?
- Повышают ли параметры компиляции, такие как отключение проверки переполнения, и влияют ли они на небезопасный код?
- Будет ли приведенная выше программа быстрее на C ++ или ничем не отличается?
- Стоит ли составлять длинные интенсивные задачи по обработке чисел на таком языке, как C ++, или использовать / unsafe для бонуса? Менее субъективно, я мог бы выполнить интенсивную операцию быстрее, делая это?