У меня есть класс с парой статических массивов:
int [] с 17 720 элементами
строка [] с 17 720 элементами
Я заметил, что при первом доступе к этому классу инициализация занимает почти 2 секунды, что вызывает паузу в GUI, который обращается к нему.
В частности, это поиск имен символов Unicode. Первый массив является индексом для второго массива.
static readonly int[] NAME_INDEX = {<br>
0x0000, 0x0001, 0x0005, 0x002C, 0x003B, ...
static readonly string[] NAMES = {<br>
"Exclamation Mark", "Digit Three", "Semicolon", "Question Mark", ...
Следующий код показывает, как используются массивы (с учетом кода символа). [Примечание: этот код не является проблемой производительности]
int nameIndex = Array.BinarySearch<int>(NAME_INDEX, code);<br>
if (nameIndex > 0)
{
return NAMES[nameIndex];
}
Полагаю, я смотрю другие варианты того, как структурировать данные таким образом, чтобы 1) класс быстро загружался и 2) я мог быстро получить «имя» для заданного кода символа.
Разве я не должен хранить все эти тысячи элементов в статических массивах?
Обновление
Спасибо за все предложения. Я опробовал подход с использованием словаря, и производительность добавления всех записей кажется очень низкой.
Вот код с данными Unicode для проверки массивов и словарей
http://drop.io/fontspace/asset/fontspace-unicodesupport-zip
Обновление решения
Я протестировал свои оригинальные двойные массивы (которые работают быстрее обоих вариантов словаря) с фоновым потоком для инициализации, и это немного помогло производительности.
Однако настоящий сюрприз - насколько хорошо работают бинарные файлы в потоках ресурсов. Это самое быстрое решение, обсуждаемое в этой теме. Спасибо всем за ваши ответы!