.Net 2.0 - Насколько эффективный Универсальные Списки?

Эта проблема решается весной 3.0.4.RELEASE, где вы можете использовать конфигурационный элемент в конфигурационном файле весеннего диспетчера.

Проверить Документация по весне

9
задан 4 revs 2 October 2010 в 20:50
поделиться

10 ответов

Списки являются массивами внизу, таким образом, хит производительности добавления объекта, если это не в конце, будет очень дорогостоящим.

Иначе они будут в основном с такой скоростью, как массив.

2
ответ дан 4 December 2019 в 13:06
поделиться

Возможно, необходимо рассмотреть использование некоторого типа базы данных в оперативной памяти, если у Вас есть так много данных, которые должны быть сохранены в памяти,

4
ответ дан 4 December 2019 в 13:06
поделиться

Список использует массив внутренне, и Словарь использует хеш-таблицу.

Они быстрее затем более старые неуниверсальные классы ArrayList и HashTable, потому что у Вас нет стоимости преобразования всего для возражения (упаковка, распаковывая и проверка типа) и потому что MS оптимизировал их лучше затем старые классы.

2
ответ дан 4 December 2019 в 13:06
поделиться

Объект LinkedList занял бы меньше времени, чтобы добавить к и удалить из из-за природы связанных списков. То, когда Вы добавляете элемент, он не должен изменять размер массива как нормальный список, делает. Кроме того улучшения я подозревал бы, что LinkedList будет работать о том же как нормальный Список.

Посмотрите это на Википедию: Связанные списки по сравнению с Массивами

2
ответ дан 4 December 2019 в 13:06
поделиться

Если Вам нужна эффективность во вставке, или удаление наугад помещает в списке существует структура данных LinkedList - Статья MSDN сообщает подробности. Очевидно, быть произвольным доступом связанного списка не эффективно.

2
ответ дан 4 December 2019 в 13:06
поделиться

Если Вы действительно хотите видеть все окровавленные детали того, как Список <> и Словарь <> реализованы, используйте замечательно полезный Отражатель.NET.

См. также документацию для превосходной Библиотеки Универсального набора C5, которая имеет очень хорошие реализации многих типов набора, отсутствующих в BCL.

2
ответ дан 4 December 2019 в 13:06
поделиться

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

Ключ должен использовать FILE_FLAG_NO_BUFFERING и всегда чтение-запись точно ценность одного сектора данных.

1
ответ дан 4 December 2019 в 13:06
поделиться

Я думаю, что вещью с двумя процессами могло бы быть излишество; плюс межпроцессное взаимодействие будет, вероятно, иметь некоторое замедление (хотя я никогда не пробовал такую вещь как взятие мое мнение о нем как мелкая частица соли). Я работаю над управляемым данными приложением, где каждый блок данных является крошечным, но мы можем иметь вверх миллиарда блоков данных в любой момент времени. Метод, который мы используем, в основном:

  • Все находится на диске, независимо от того, что
  • Данные заблокированы в "блоки"; каждый блок знает, когда к нему в последний раз получили доступ
  • Блоки вытащены от диска в память, когда они необходимы
  • Низкоприоритетный поток контролирует использование памяти и удаляет последний использованный материал

Другими словами, это - доморощенная схема кэширования. Преимущество - Вы, может управлять со сверхвысокой точностью, какие данные находятся в памяти, которая Вы не можете при доверии схеме подкачки страниц ОС. Если некоторая наиболее часто используемая переменная закончится смешанная в с Вашими данными на странице, то та страница будет неоднократно поражаться и препятствовать тому, чтобы он шел в диск. При разработке в приложение размещения, что некоторые запросы данных займут больше времени, чем другие, то это будет работать вполне прилично. Особенно, если Вы будете знать то, что разделяет Вас на блоки, то будет нуждаться заранее (мы не делаем).

Следует иметь в виду, что все в приложении.NET должно соответствовать в 2 ГБ памяти, и из-за способа, которым GC работает и издержки Вас приложение, у Вас на самом деле, вероятно, есть несколько меньше, чем это для работы с.

Для шпионажа за точно, на что похожа "куча" и кто выделяет используйте профилировщика CLR: http://www.microsoft.com/downloads/details.aspx?familyid=86ce6052-d7f4-4aeb-9b7a-94635beebdda&displaylang=en

1
ответ дан 4 December 2019 в 13:06
поделиться

.Net List не использует связанный список. Это - массив, это запускается с 4 положений по умолчанию, и я думаю, что это удваивается в размере, поскольку Вы добавляете вещи. Таким образом, производительность может варьироваться немного в зависимости от того, как Вы используете ее.


Если Ваше использование VS, 2008 выполняет профилировщика, прежде чем Вы станете слишком далекими вниз эта дыра крысы. Когда мы начали на самом деле смотреть на то, где мы теряли время, у использования не заняло много времени выяснять, что дебатирование тонкостей связанных списков просто действительно не имело значения.

0
ответ дан 4 December 2019 в 13:06
поделиться

Я бы и пальцем не пошевелил, пока не возникнет проблема с производительностью, и профайлер не покажет, что она есть. Тогда вам нужно будет решить серьезную проблему, и это будет намного проще.

0
ответ дан 4 December 2019 в 13:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: