По моему личному мнению, пытающегося предугадывать собственное управление памятью .NET не является практикой я рекомендую. Вы просто не можете обеспечить уровень управления распределением памяти, который вы можете в собственном сценарии, но в равной степени вам не нужно. Я был одержим желанием сделать это, когда я впервые перешел с C++ (где я регулярно работал со своими собственными кучами и записывал процедуры локализации памяти и т. Д.), Но быстро стало очевидно, что мне просто не нужно, или может I.
Например, у вас может быть массив из MyPooledObject
в нижней части вашего trie, но если это ссылочный тип, тогда у вас есть только массив ссылок, где фактическая память для каждый находится где-то в другом месте - вы не можете контролировать (если вы не адаптируете свой собственный хост для среды выполнения).
Это означает, что вместо этого используется тип значения, но они просто не подходят для использования в объединенном сценарии, потому что пользовательские типы значений должны быть неизменными (я могу сказать, что безопасно, не оправдывая его - просто google 'неизменяемый' и ' struct 'targetpage site: stackoverflow.com, чтобы увидеть больше), и поэтому не следует относиться к объектам многократного использования.
Если вам нужна индексированная коллекция объектов в .Net, где каждый из них распознается ключом, поддерживающим хэш, используйте словарь.
Если у вас слишком много объектов, чтобы поместиться в памяти, то либо:
1) Получить больше памяти
2) использовать базу данных и кэш локальных сегментов ней
Или как: Вы могли бы рассмотрите вопрос о AppFabric and its cache features, таким образом вы можете построить ферму машин, предназначенную для работы в кэшах в памяти миллионов объектов. Стоимость аппаратных средств, вероятно, будет меньше, чем стоимость разработки собственного решения для управления памятью для .Net :)
20 миллионов элементов? Использование памяти в trie в этом случае почти гарантированно будет больше, чем словарь/хэш-таблица - возможно, на несколько порядков ... Также вам действительно нужен пул объектов в памяти? Собственное управление памятью .Net довольно прочное. –
Какие стандартные структуры данных вы пробовали и соответствовали вашим потребностям? (объясните, почему) – Peter