我不得不處理大量通常不適合主內存的數據。我訪問這些數據的方式具有很高的局部性,因此將其緩存在內存中看起來是一個不錯的選擇。是否僅僅malloc()一個巨大的數組是可行的,讓操作系統找出哪些位分頁並保留哪些位?使用頁面文件進行緩存?
回答
假設數據來自文件,您最好關閉內存映射該文件。否則,你最終做的是分配數組,然後將數據從文件複製到數組中 - 並且由於數組映射到頁面文件,所以基本上只是將原始文件複製到頁面文件中,並且在這個過程中污染了「緩存」(即物理內存),因此當前活動的其他數據被驅逐的可能性更大。然後,當你完成後,你(通常)從數組中將數據寫回到原始文件中,在這種情況下(這意味着)將頁面文件複製回原始文件。
內存映射文件反而只是創建一些地址空間,並將其直接映射到原始文件。這樣可以避免將數據從原始文件複製到頁面文件(並在完成時再次返回),並且可以在從原始文件到頁面文件的路上將數據臨時移動到物理內存中。當然,最大的勝利在於/如果原始文件的實質部分根本沒有用到(在這種情況下,它們可能永遠不會被讀入物理內存,假設未使用的塊至少是一個頁面在尺寸方面)。
如果數據在一個大文件中,請使用mmap來查看它。現代計算機有這麼多的RAM,你可能沒有足夠的交換空間可用。
那麼在mmapped區域中操作它怎麼樣呢?它會執行嗎? – 2010-09-20 23:13:06
當然,只要您觸摸的區域適合您的物理記憶,它就會非常快速。在退出時,或者在其他地方需要內存時,頁面將被寫回到文件中,但這對您而言是透明的。 – twk 2010-09-21 04:17:27
- 1. 使用Memcached進行頁面緩存
- 2. 使用Ehcache進行網頁緩存
- 3. 使用XMLHttpRequest緩存頁面
- 4. 頁面緩存使用PHP
- 5. 使用Apache和capistrano進行Rails頁面緩存
- 6. 使用Varnish/ESI和Zend Framework進行緩存和頁面瀏覽
- 7. 產品評論顯示使用光油,APC和塊緩存進行頁面緩存的產品頁面信息
- 8. 使用UnitOfWork進行緩存
- 9. 使用inherited_resources進行緩存
- 10. webkit .appcache文件緩存動態頁面
- 11. 在所有頁面緩存javascript文件
- 12. 緩存頁面
- 13. Eclipse進行PHP - 緩存文件
- 14. 用redis Rails頁面緩存?
- 15. 使用cookie緩存頁面是否好?
- 16. 使用清漆緩存動態頁面
- 17. 使用cloudflare來緩存動態頁面
- 18. 如何使用AngularJS RouteProvider緩存頁面?
- 19. AntiForgeryToken和緩存頁面的使用
- 20. 緩存HTML頁面
- 21. Node.js頁面緩存
- 22. 緩存HTML頁面
- 23. silverlight頁面緩存
- 24. 緩存asp.net頁面
- 25. 使用session_start()時varnish緩存不緩存PHP頁面
- 26. 使用輸出緩存同時編程緩存一堆頁面
- 27. 是否有可能使用localStorage進行客戶端頁面/ DOM緩存?
- 28. 將頁面緩存到多個文件或單個文件
- 29. 使用AJAX進行網頁編程,緩存問題(我認爲)
- 30. 使用燒杯進行緩存
我的數據不是來自一個文件,但這是我得到的最佳答案,它可能對其他人有用,所以我會接受它。 – 2011-02-03 23:23:58