.NET緩存中是否有最大數量的鍵/元素?如果是,那麼這個限制是多少?我不是指以MB爲單位的最大緩存大小。.NET緩存:元素的最大數量
回答
不能有以字節爲單位的準確限值及其執行不知道物體有多少字節需要(有可能弄清楚,但不提供外的框)。沒有像「sezeofobject(reference)」這樣的內置函數,因爲不可能說出「對象結束」的位置。假如你有一個物體指向另外3個物體,它們是否應該算作原始物體的一部分?
無論如何,儘管可以間接評估一個緩存解決方案需要多少ram,但不可能做到準確,例如,可能只是使用反射來計算字段數量並使用sizeof( )原始類型等。但是,這又會給出一個球場號碼。
我們如何解決這個問題 - 我們序列化,我們保持字節[]對象 - 這殺死一個子彈許多兔子:
- 對象從緩存中返回的「不可見」 GC和不 穿上圖的遍歷任何內存壓力
- 我們可以知道一個對象圖究竟有多少字節需要
- 從緩存中返回的對象是100%線程安全的副本
GC是最大的問題。
與.NET提供的緩存類是方便,但有一個主要的問題 - 他們不能存儲大量的數據(上千萬+)很長一段時間的對象,而不殺死你的GC。如果你緩存了幾千個對象,那麼它們的工作效果很好,但是當你移動到數百萬個並保留它們直到它們傳播到GEN2時 - 當系統達到低內存閾值並且GC需要掃描時,GC暫停最終會開始顯着所有的氏族。
實用性是這樣的 - 如果你需要存儲幾十萬實例 - 使用MS緩存。如果您的對象是2場或25場,則無關緊要 - 與參考的數量有關。
在另一方面存在這樣的情況時大的RAM,其是常見的這些日子裏,需要利用,即64 GB。爲此,我們創建了一個100%託管的內存管理器和高速緩存。
我們的解決方案可以很容易地存儲在存儲器中,過程3億對象,而完全不徵稅GC - 這是因爲我們在存儲大(250 MB)數據字節[]段。
下面是代碼:NFX樁(阿帕奇2.0) https://github.com/aumcode/nfx/blob/master/Source/NFX/ApplicationModel/Pile/ICache.cs
和視頻:NFX樁緩存 - 的Youtube
- 1. .Net列表和最大元素數
- 2. .net緩存大小
- 3. 緩存大量數據
- 4. 緩存內存中的大量數據
- 5. ASP.NET緩存最大大小
- 6. 最大緩存大小
- 7. jQuery緩存元素
- 8. UITableView元素緩存
- 9. 緩衝區的最大數量
- 10. 如何獲取ServiceWorker緩存中元素的大小和/或數量?
- 11. iPad中允許的最大緩存數
- 12. 在.Net中緩存大量數據可以接受嗎?
- 13. 數據結構來緩存最頻繁的元素
- 14. CakePHP的1.3.10元素緩存
- 15. 緩存有關參數的CakePHP元素
- 16. 三維數組中特定元素序列的最大數量
- 17. 二維整數陣列中元素的最大數量
- 18. 查找數組中元素數量最大的子序列
- 19. 數量同時最大和最小元素
- 20. GAMS最大元素
- 21. 用最大大小的緩存文件夾實現PHP緩存
- 22. MPI_Send/MPI_Recv:元素數量或緩衝區大小?
- 23. 頁面上的HTML元素的最大推薦數量
- 24. 每個節點的不同子元素的最大數量
- 25. 如何檢查均勻間隔的元素的最大數量?
- 26. +(id)arrayWithObjects的最大元素數:
- 27. 返回數組中最大的元素
- 28. 兩個數組中最大的元素
- 29. .NET中的數據緩存
- 30. jQuery緩存元素,$變量和變量之間的區別?
你的意思是'System.Web.Caching.Cache' ?如果是這樣,這取決於['EffectivePercentagePhysicalMemoryLimit'](http://msdn.microsoft.com/en-us/library/system.web.caching.cache.effectivepercentagephysicalmemorylimit.aspx)和'EffectivePrivateBytesLimit'。否則,這取決於你的記憶。與每個集合一樣,您可以添加項目,直到出現「OutOfMemoryException」。 –
有'網頁緩存',有'企業庫緩存',現在是'運行時緩存'的一部分,有'AppFabric緩存'。但嚴重的是,他們都沒有限制項目的數量,只有內存量可以拋棄它們。其中一些實際上可以檢測到它們何時耗盡內存並開始卸載自己。 –