我們有一個在三個應用程序中使用的對象模型。兩個程序收集數據,另一個讀取數據並生成報告。這個系統非常不連貫,所以我們不能有一個單一的數據庫,所有的程序都可以對話。我想要一個ORM嗎?
現在,程序只是使用公共庫來填充對象模型並序列化/反序列化到磁盤。具體來說,我們正在使用XML序列化。
這個模型有幾個問題。 1)XML可能被認爲是浪費。這些文件可能變得龐大而笨拙。老實說,文件大小現在不是一個大問題。 2)我最關心的是記憶足跡。整個文件被加載到一個對象模型中,對其進行操作,然後保存。
希望我已經表達了我的擔心,在某些時候,我們會在運行時遇到有關此應用程序的內存問題。足夠的數據將被收集到一個「數據庫」(xml文件),它不能一次加載到內存中。
我想要的是訪問我的對象模型支持文件存儲而不是內存。我希望對象模型的更改最小化。當一個對象被訪問時,它來自磁盤,當它被設置時,它會被保存(如果可能,會自動保存)。
我們用SQLite,SQL Compact 4.0和EF 4以及LINQ to XML(簡要地)研究了NHibernate。過去我也使用db4o將對象緩存到磁盤,但那是一個無關的項目。
在我潛入並花時間學習其中之一之前,我想知道我的想法是否有意義。我可以有一個對象模型「神奇地」緩存到存儲介質,而不是無限地膨脹我的內存足跡?即使它不是最優雅的,完成這件事的最短路徑是什麼?
是否有其他技術可以幫助我?內存映射文件,linq-to-sql,Lazy(T)(僅在需要時才從文件中獲取對象)。
我意識到這是一個開放式問題。我正在尋找一個大的圖片響應和細節,如果有人在那裏有真實世界的經驗這樣做。鏈接將有幫助...
謝謝。
您是否因爲使用移動設備而有內存問題?我問,因爲我看到sql-server-ce作爲標籤。 – 2011-03-03 08:08:23
現在不能移動,看着SQL Server Compact,因爲它可以嵌入到我的應用程序中(比如SQLite)。如果我們使用EF,SQL Compact將成爲數據庫後端的考慮因素。內存方面的擔憂是由於它是一款32位應用程序,因此2GB的處理限制。 – Nate 2011-03-03 08:12:22
您的應用是獨立應用嗎?這聽起來像你不想要一個集中的數據庫。該應用是否爲多用戶?你多久更新一次?對應用程序做了多少報告?這些是您選擇時重要的問題類型。 – Andrew 2011-03-03 08:31:41