Производительность byte vs. int в .NET.

В мире pre -.NET я всегда предполагал, что int быстрее байта, так как это работает процессор.

Теперь имеет значение привычка использовать int даже тогда, когда байты могут работать, например, когда байтом является то, что хранится в базе данных

Вопрос: Как .NET обрабатывает тип байта в сравнении с int из представления точки производительности/памяти.

Обновление: Спасибо за ввод. К сожалению, никто не ответил на этот вопрос. Как .NET обрабатывает byte vs. int.

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

Ответ 1

ОК, я только что открыл окно разборки. Там нет ничего, кроме обычного "mov byte"

Итак,.NET/CLR ничего не добавляет к этому. И все арифметические операции, выполняемые против значений int, поэтому нет разницы между байтами и int там.

Ответ 2

Ваше предположение pre -.NET было ошибочным - всегда вокруг было много компьютерных систем, а номинально "байт-адресуемый", должен был бы установить один байт, читая полное слово, маскируя его, чтобы изменить один байт, записывайте все это - медленнее, чем просто задание полного слова. Это зависит от внутренних компонентов процессора и памяти, а не от видимой архитектуры программиста.

В .NET или в собственном коде сначала сосредоточьтесь на использовании данных как семантически корректных для своего приложения, а не на попытке удвоить догадки архитектора компьютерной системы - "Преждевременная оптимизация - это корень всех злых в программировании", цитируйте Кнута, цитируя Хоар.

Ответ 3

Вы говорите о хранилище или операции над байтом? Если это место для хранения, да, оно занимает меньше места, чем int (1 байт против 4 байта).

В терминах арифметических операций над байтом у меня нет необработанных чисел, и на самом деле только профилировщик может дать их вам. Однако вы должны учитывать, что арифметические операции не выполняются на экземплярах исходного байта. Вместо этого они продвигаются до int, а затем операция выполняется по int. Вот почему вы должны явно выполнять операции, подобные следующим

byte b1 = 4;
byte b2 = 6;
byte b3 = b1 + b2;  // Does not compile because the type is int

Итак, в общем случае я считаю безопасным сказать, что арифметические операции над int быстрее, чем байт. Просто потому, что в байтовом случае вы платите (возможно, очень небольшую) стоимость продвижения по типу.

Ответ 4

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

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

В конце концов, каждый тип должен быть оптимизирован для намеченных целей, поэтому вам лучше потратить свое время на дизайн, а не на оптимизацию.

Ответ 5

То же, что и любая другая платформа. Почему .NET изменил это? Код все еще должен работать на том же процессоре, который имеет те же самые рабочие характеристики, что и всегда.

И это означает, что вы все равно должны использовать int по умолчанию.