Есть ли максимальное количество ключей/элементов, которые вы можете иметь в кэше .NET? Если да, то какой предел? Я не имею в виду максимальный размер кэша в MB..NET Cache: максимальное количество элементов
ответ
Не может быть точного предела в байтах, так как их реализация НЕ МОЖЕТ ЗНАТЬ, сколько байтов занимает объект (можно выяснить, но недоступно из коробки). Нет встроенной функции, такой как «sezeofobject (reference)», потому что невозможно сказать, где «объект заканчивается». Скажем, у вас есть объект, указывающий на 3 других объекта, если они будут считаться частью исходного объекта?
Во всяком случае, хотя косвенно можно определить, сколько единиц будет использовать кэширующее решение, невозможно сделать точно, например, можно просто использовать отражение для вычисления количества полей и использовать sizeof () примитивных типов и т. д., но опять же, это даст номер шара.
Как мы решили эту проблему - мы сериализовать объекты, которые мы держим в байт [] - это убивает много кроликов с одной пулей:
- Возвращаемый объект из кэша является «невидимым» для GC и не поместить любое давление памяти на обходе графа
- Мы можем точно знать, сколько байт объектного граф принимает
- Возвращаемого объект из кэша 100% поточно-копия
Самая большая проблема - GC.
Кэшированные классы, поставляемые с .NET, удобны, но имеют серьезную проблему: они не могут хранить много данных (десятки миллионов +) объектов в течение длительного времени, не убивая ваш GC. Они отлично работают, если вы кэшируете несколько тысяч объектов, но в тот момент, когда вы переходите на миллионы и поддерживаете их до тех пор, пока они не будут распространяться в GEN2 - паузы GC в конечном итоге станут заметны, когда система достигнет порога низкой памяти, и GC необходимо подметать всех родов.
Практичность заключается в том, что если вам нужно хранить несколько сотен тысяч экземпляров, используйте кеш-память MS. Не имеет значения, являются ли ваши объекты 2-полевыми или 25 полями - это количество ссылок.
С другой стороны, есть случаи, когда необходимо использовать большие ОЗУ, которые являются общими в наши дни, то есть 64 ГБ. Для этого мы создали 100% управляемый менеджер памяти и кеш, который находится поверх него.
Наше решение может легко хранить 300 000 000 объектов в оперативной памяти без обхода GC вообще - это потому, что мы храним данные в больших (250 мб) байтах [] сегментах.
Вот код: NFX ворса (Apache 2,0) https://github.com/aumcode/nfx/blob/master/Source/NFX/ApplicationModel/Pile/ICache.cs
И видео: NFX ворса Cache - Youtube
- 1. Максимальное количество сгруппированных элементов
- 2. RadComboBox максимальное количество элементов привязки
- 3. Установить максимальное количество выбранных элементов
- 4. Максимальное количество элементов на карте
- 5. Максимальное количество потоков в приложении .NET?
- 6. Jlist Limit Максимальное количество выбранных элементов
- 7. Рекомендуемое максимальное количество элементов HTML на странице
- 8. Как проверить максимальное количество элементов, расположенных равномерно?
- 9. Максимальное количество HTML <img> элементов
- 10. Максимальное количество элементов в двумерном целочисленном массиве
- 11. Максимальное количество элементов x-Axis в HighCharts
- 12. Максимальное количество перетасованных элементов в php
- 13. jQuery UI, droppable, accept максимальное количество элементов
- 14. PHP массив ассоциативный, получить максимальное количество элементов
- 15. Максимальное количество поставленных элементов в ThreadPool.QueueUserWorkItem
- 16. Максимальное количество элементов перечисления в Java
- 17. Redis: задает максимальное количество элементов набора
- 18. «Максимальное количество выбранных элементов» -Validator для ListBox
- 19. Redshift: Максимальное количество элементов в разделе «IN»?
- 20. Максимальное количество элементов в двумерном массиве
- 21. Максимальное количество элементов в списке J2ME
- 22. Database Trigger - Максимальное количество элементов в таблице
- 23. Максимальное количество элементов на пути к матрице
- 24. Максимальное количество элементов в std :: bitset?
- 25. C# Максимальное количество потоков
- 26. EventingBasicConsumer: максимальное количество потоков
- 27. Каков срок действия элементов в HttpRuntime Cache ....?
- 28. Redis Cache .Net Client
- 29. .net cache/pool
- 30. .net словарь cache C#
ли вы имеете в виду 'System.Web.Caching.Cache' ? Если это так, это зависит от ['EffectivePercentagePhysicalMemoryLimit'] (http://msdn.microsoft.com/en-us/library/system.web.caching.cache.effectivepercentagephysicalmemorylimit.aspx) и' EffectivePrivateBytesLimit'. В противном случае это зависит от вашей памяти. Как и в каждой коллекции, вы можете добавлять элементы, пока не получите «OutOfMemoryException». –
Существует «веб-кеш», существует «кэширование корпоративной библиотеки», которое теперь является частью «кеширования времени выполнения», есть «AppFabric Cache».Но серьезно, ни один из них не имеет ограничений по количеству предметов, только объем памяти может их отбросить. И некоторые из них могут фактически обнаруживать, когда у них заканчивается память и начинают выгружать себя. –