[英]What should I use to temporary store XML data that will be reused?
我有一個47mb的 XML文件,我必須在我的應用程序上反復閱讀,但大多數情況下它只需要一個給定術語定義的1個節點。
例:
<customers>
<customer>
<id>someid</id>
<name>somename</name>
</customer>
<customer>
<id>someid</id>
<name>somename</name>
</customer>
...
<customer>
<id>someid</id>
<name>somename</name>
</customer>
<customer>
<id>someid</id>
<name>somename</name>
</customer>
</customers>
所以我想在程序加載后將xml加載到Dictionary或List中,並將其保留在那里,直到應用程序關閉為止。
如果我必須使用字典例如:
private Dictionary<int,string> myCustomerList = new Dictionary<int,string>();
我以后可以使用它來獲取我需要的信息:
if (myCustomerList.ContainsKey(keyX))
myValue = myCustomerList[keyX];
您的方法沒有任何功能上的錯誤,但是當向客戶添加更多信息時會發生什么? 例如,您可能有一個“location”元素:
<customer>
<id>someid</id>
<name>somename</name>
<location>somename</location>
</customer>
還要考慮將數據移動到數據庫的場景 - 您必須重寫大量代碼。
在應用程序的持續時間內直接使用XML對象通常被認為是不好的做法。 “正確”的方法是首先將XML數據加載到面向對象的對象中。
您應該創建一個名為Customer
的類,並使用List<Customer> customers =new List<Customer>()
來存儲對象。 然后,您可以使用customers.Find(x=>x.Id == myId)
來定位您的對象。
請記住,如果將對象存儲在內存中,則應用程序將使用至少47mb的RAM。 隨着您的業務獲得更多客戶,這可能會增長。 也許您應該考慮延遲加載客戶(在需要時從XML文件中檢索它們) - 這將會更慢,因此它實際上取決於您的吞吐量和數量要求。
你的approch非常正確。 如果以后將更多信息添加到客戶類,則使用list generic class,否則您的approch是正確的。
列表 - 我最喜歡的一個 - 可以與泛型一起使用,因此您可以使用強類型數組,例如List。 除此之外,其行為與ArrayList非常相似。
字典 - 與上面相同,僅通過泛型強類型,例如Dictionary
一直使用List和Dictionary。
我會說47 MB的文件,在數據表中一次加載將非常容易,也有利於搜索。
您應該考慮使用WeakReferences將此數據表存儲在內存中。
47MB是一個相當大的數據,應用程序始終保持在內存中。
但是,您可以將XmlReader
與XNode.ReadFrom
結合使用,以讀取內存較少的大型Xml。
您可以使用此方法編寫一個返回節點集合的方法,從讀取器讀取節點時生成每個節點。 此方法使您可以使用非常小的內存占用來處理任意大型XML文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.