簡體   English   中英

我應該使用什么來臨時存儲將被重用的XML數據?

[英]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是一個相當大的數據,應用程序始終保持在內存中。

但是,您可以將XmlReaderXNode.ReadFrom結合使用,以讀取內存較少的大型Xml。

您可以使用此方法編寫一個返回節點集合的方法,從讀取器讀取節點時生成每個節點。 此方法使您可以使用非常小的內存占用來處理任意大型XML文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM