Строка против байтового массива, Производительность

(Этот пост посвящен высокочастотному программированию)

Недавно я увидел на форуме (я думаю, что они обсуждали Java), что если вы приходится анализировать много строковых данных, лучше использовать массив байтов, чем строку с split (). Точный пост был:

Один из приемов повышения производительности при работе с любым языком, C ++, Java, C # - это , чтобы избежать создания объектов. Это не стоимость выделения или сборки мусора, это стоимость доступа к большим массивам памяти, которые не помещаются в кэш ЦП.

Современные процессоры намного быстрее своей памяти. Они останавливаются на много, много циклов на каждый промах в кэше.Большая часть бюджета транзистора ЦП выделяется на его сокращение за счет больших кешей и большого количества тиков.

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

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

Он просто говорит: «Не используйте строки, потому что они являются объектами, а создание объектов обходится дорого»? Или он говорит что-то еще?

Обеспечивает ли использование байтового массива данные, оставшиеся в кеше как можно дольше? Когда вы используете строку, не слишком ли велика она для хранения в кэше ЦП? Как правило, использование примитивных типов данных является лучшим методом для написания более быстрого кода?

10
задан user997112 24 October 2011 в 13:46
поделиться