В мире 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
по умолчанию.