Является ли С# быстрее, чем VB.NET?
Вы думаете, что оба они одинаковы.
Но, возможно, это компилятор, который использовал Microsoft, но я заметил, что при компиляции двух очень маленьких программ одинаковая логика. VB.NET использует больше инструкций IL.
Верно ли это, что С# должен быть быстрее, хотя бы потому, что его компилятор умнее.
Ответы
Ответ 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"
Ответ 5
Похоже, что различия заключаются в интерпретации исходного кода компиляторами. Статья технической республики приходит к такому же выводу:
https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-1027686.html
Ответ 6
Я не проводил никаких тестов, но я думаю, что скорость будет примерно одинаковой. Если что-то выбрать для стиля и синтаксиса кодирования.