Подтвердить что ты не робот

Является ли С# быстрее, чем VB.NET?

Вы думаете, что оба они одинаковы.

Но, возможно, это компилятор, который использовал Microsoft, но я заметил, что при компиляции двух очень маленьких программ одинаковая логика. VB.NET использует больше инструкций IL.

Верно ли это, что С# должен быть быстрее, хотя бы потому, что его компилятор умнее.

4b9b3361

Ответ 1

Это действительно сложно ответить окончательно ограниченным объемом доступной информации. Это очень помогло бы, если бы вы предоставили код из обоих образцов и использовали параметры компилятора.

Чтобы ответить на вопрос, хотя С# не является по своей сути быстрее. Оба языка генерируют IL и запускаются на CLR. Для большинства функций они даже генерируют один и тот же IL. Существуют различия в некоторых подобных функциях, но они редко добавляют значительные изменения в производительности.

VB может появиться медленнее, если вы столкнетесь с некоторыми из тонких различий в языках и среде. Несколько общих примеров...

  • Во многих средах по умолчанию проверены целые операции для VB.Net, но не С#
  • Тонкие проблемы с кодированием могут привести к позднему связыванию, когда оно кажется ранним связыванием.
  • Верить switch и Select имеют ту же семантику

После их удаления языки выполняют очень похожие профили производительности.

Ответ 2

Ответ: да и нет. Это действительно зависит от конкретной функции, о которой вы говорите. Кроме того, существуют области, где VB выполняется быстрее. Я могу привести пример каждого из них.

Этот код в VB...

For i As Integer = 0 To Convert.ToInt32(Math.Pow(10, 8))
Next

... примерно на 100 раз быстрее, чем этот код на С#.

for (int i = 0; i <= Convert.ToInt32(Math.Pow(10, 8)); i++)
{
}

Это не значит, что компилятор VB лучше генерирует код, который быстрее выполняет for петли. Это то, что VB вычисляет цикл, связанный один раз, когда С# вычисляет условие цикла на каждой итерации. Это просто принципиальное различие в том, как должны были использоваться языки.

Этот код является С#...

int value = 0;
for (int i = 0; i <= NUM_ITERATIONS; i++)
{
  value += 1;
}

... немного быстрее, чем эквивалент в VB.

Dim value As Integer = 0
For i As Integer = 0 To NUM_ITERATIONS
  value += 1
Next

Причиной в этом случае является то, что поведение по умолчанию для VB заключается в выполнении проверки переполнения, а С# - нет.

Я уверен, что есть и другие различия в языках, которые демонстрируют сходные оценки производительности. Но оба языка построены поверх CLR и оба скомпилируются в один и тот же IL. Таким образом, создание таких правил, как "Язык X быстрее, чем язык Y", без добавления важного квалификационного предложения "в ситуации Z" просто неверно.

Ответ 3

С# соответствует ближе к IL, чем VB.NET

VB.NET иногда делает много вещей за кулисами. Подобно On Error Resume Next, которые пишут try catch для каждого утверждения

Но в целом оба имеют те же функции и производительность.

Вы можете открыть свой код в Reflector и посмотреть как код С#. Поймите, если код С# был тем, что вы ожидали

Ответ 4

Убедитесь, что программы действительно идентичны. Например, в зависимости от опций эти две строки на самом деле очень разные:

Dim x = "some string"

.

string x = "some string";

Чтобы соответствовать этому С# -коду, VB должен выглядеть так:

Dim x As String = "some string"

Ответ 6

Я не проводил никаких тестов, но я думаю, что скорость будет примерно одинаковой. Если что-то выбрать для стиля и синтаксиса кодирования.