(Этот пост посвящен высокочастотному программированию)
Недавно я увидел на форуме (я думаю, что они обсуждали Java), что если вы приходится анализировать много строковых данных, лучше использовать массив байтов, чем строку с split (). Точный пост был:
Один из приемов повышения производительности при работе с любым языком, C ++, Java, C # - это , чтобы избежать создания объектов. Это не стоимость выделения или сборки мусора, это стоимость доступа к большим массивам памяти, которые не помещаются в кэш ЦП.
Современные процессоры намного быстрее своей памяти. Они останавливаются на много, много циклов на каждый промах в кэше.Большая часть бюджета транзистора ЦП выделяется на его сокращение за счет больших кешей и большого количества тиков.
Графические процессоры решают проблему по-другому, имея множество потоков, готовых к выполнению, чтобы скрыть задержку доступа к памяти и иметь небольшой кеш или совсем его не использовать, а также расходовать транзисторы на большем количестве ядер.
Так, например, вместо использования String и split для анализа сообщения используйте байтовые массивы, которые можно обновлять на месте. Вы действительно хотите, чтобы избегал произвольного доступа к памяти больших структур данных, по крайней мере, во внутренних циклах .
Он просто говорит: «Не используйте строки, потому что они являются объектами, а создание объектов обходится дорого»? Или он говорит что-то еще?
Обеспечивает ли использование байтового массива данные, оставшиеся в кеше как можно дольше? Когда вы используете строку, не слишком ли велика она для хранения в кэше ЦП? Как правило, использование примитивных типов данных является лучшим методом для написания более быстрого кода?