tgoop.com/csharp_gepard/77
Last Update:
Бенч, который не работал #бенч #память #скорость
Однажды ко мне пришёл подпрыгивающий от изумления коллега, и показал примерно вот такой бенчмарк. По его замерам выходило, что Array.IndexOf
по массиву с int в 300 раз быстрее применения того же метода на массиве uint. Более того, uint что-то там ещё и аллоцирует!
Ответ на эту загадку, конечно, элементарный, но показательный. Кто-то знает, в чём проблема?
—
Так как прошло достаточно времени, то можно написать правильный ответ прямо тут: дело в том, что при вызове Array.IndexOf(uint_array, 15)
, число 15 воспринимается компилятором как int, а значит перегрузка IndexOf<T>(T[] array, T value)
не подходит. А значит, выбирается метод IndexOf(object[] array, object value)
.
Вывод: проблему сложно заметить, она не про перформанс, а про внимательность. Поэтому надо быть очень внимательным, когда мы пишем код, ведь нам очень легко получить проблему с производительностью на пустом месте. Вот как тут.
Код бенчмарка в комментариях.
BY C# Heppard

Share with your friend now:
tgoop.com/csharp_gepard/77