2009-11-09 46 views
2

我有我使用序列化保存到文件系統的對象。當我加載應用程序時,我應該加載所有對象到內存中還是僅存根(用於搜索功能)?當我的應用程序加載時應該將什麼內容加載到內存中?

如果我只加載存根,那麼我會在需要時從文件系統加載它們,並將它們保存在內存中以便快速訪問。

數量級是數百條記錄而不是數千條。

您會推薦哪種方式?

+0

每條記錄​​有多大? – 2009-11-09 20:30:49

回答

0

如果對象的大小和數量總是相當小,請在啓動時加載它們。否則使用存根/代理。

0

這取決於。

如果您知道它永遠不會超過數百個,那麼將它們全部放入內存中。

如果您有低估總數的可能性,請使用存根。

它還取決於記錄的大小以及它們更改的頻率。

4

根據需要加載,並保持在內存中,不要浪費starup時間加載不會使用的東西。

您甚至可以嘗試保留大多數請求的項目的記錄,然後在啓動時加載它們。

+0

+1。被困在一個預先加載所有內容的應用程序中,我完全同意。編譯後沒有理由必須在實際開始執行之前添加時間。它使得那些「快速修復」的任何東西都很快。 – 2009-11-09 20:35:32

+1

沒有比等待應用程序加載「靜態」數據(如果未使用)更糟糕的事情X-) – 2009-11-09 20:37:16

0

這實際上取決於您對這些對象的使用場景。它們在運行時是否都被應用程序頻繁使用?他們很少使用嗎?有些使用頻繁而其他使用頻繁嗎?

此外,您的應用程序將運行的系統的預期資源基準是什麼?您正在加載的對象是大還是小?即使它們只有幾百個,如果它們都是非常大的物體,那也是一個重要的因素。如果您需要低調的應用程序,那麼按需加載似乎更符合邏輯。

如果不瞭解預期的使用情況和基線執行環境,這類問題很難回答。它非常主觀。

0

內存vs性能。選擇哪一個更重要(或者更重要的是每個是多麼重要)並相應地調整對象的緩存。

你甚至可以使用Enterprise Library Caching Block,這可以加快你的實施。

相關問題