Хотя я, безусловно, рекомендую вам перейти от не общих к родовым коллекциям по множеству веских причин, я, честно говоря, сомневаюсь, что эти коллекции могут стать причиной ваших проблем с производительностью. Бокс, как правило, является лишь проблемой, когда вы добираетесь до микроскопического уровня, требуя выжать крошечные выгоды в ситуациях с высокой производительностью. Также полезно избегать в целом по причинам GC, но, как правило, это незначительно и на этой арене.
Говоря иначе: это весьма сомнительно, что бокса может вызвать проблемы с производительностью, что ваши пользователи заметят.
Очевидно, что я говорю в обобщениях. Не зная вашего конкретного сценария, я не могу сказать так много с уверенностью.
Edit: Обратите внимание, что в то время как я скептически ваша проблема может быть ваше использование необщих коллекций сами по себе, я укажу, что является очень важно, что типа коллекции вы используете для решения данной проблемы, особенно когда количество данных в коллекции велико. Вот лишь несколько примеров:
- Если вы выполняете Lookups на основе ключа, хэш-таблицы, такие как
Dictionary<TKey, TValue>
будет значительно превзойти List<T>
, например.
- Если вы проверяете дубликаты, то
HashSet<T>
будет иметь превосходную производительность.
- Если вы ищете FIFO (поведение в очереди), то
Queue<T>
будет иметь превосходную производительность.
- Если вы выполняете вставки/абстракции в случайных положениях в коллекции, то
LinkedList<T>
будет иметь превосходную производительность.
Эти коллекции должны быть частью любого набора инструментов разработчика .NET (действительно, любого разработчика). Если вы обнаружите, что используете List<T>
(или ArrayList
) или подобную структуру данных везде, где вы используете коллекции предметов, это очень хорошо может вызвать проблему производительности в будущем - опять же, особенно когда ваши коллекции большие. Я не говорю о тривиальных показателях производительности. Так что будьте осторожны, чтобы сделать разумные выборы для вашей коллекции типа.
Но я бы рекомендовал профайлер производительности в целом, такие как ANTS (хорошо, но не бесплатно) или EQATEC (также хорошо и бесплатно). Просто запустите приложение в рамках программы, такой как один из них, и посмотрите, где ваши узкие места. Я предполагаю, что вы обнаружите, что это не ваши не общие коллекции; но, естественно, я мог ошибаться.
Я очень уверен, что проблема с производительностью не будет тем классом, который вы используете. Прочтите несколько руководств по профилированию и протестируйте их. Вы также можете взять методы своего кода и выполнить их самостоятельно, чтобы проверить, сколько времени они берут за 1,10,100,100000 элементов и проверить, действительно ли это имеет значение. – dbemerlin
Лично я сомневаюсь, что это узкое место; в частности, это структуры или классы в коллекции? –
Классы. Многие из них. Используется очень сильно. Я знаю о других проблемах с фреймворком (есть много и много проблем), но я пытаюсь собрать как можно больше показателей, чтобы убедить их обновиться. –