簡體   English   中英

在C#中處理大型xml文件的方法

[英]Approach to process huge xml files in C#

有人可以指導我這個問題嗎?

在我的機構中,我們處理大尺寸(最大1 GB)的xml文件並將詳細信息插入數據庫表。 根據當前的設計,我們使用XmlReader解析xml文件並形成包含所需數據的xml字符串,然后將其傳遞到存儲過程(xml數據類型)以將詳細信息插入到db中。

現在問題是我們不確定除此之外是否會有更好的方法? 所以請建議.Net 3.5和/或sql server 2005是否有任何新功能以比我們的方法更好的方式處理這個問題。

任何有關此reagrd的幫助都將受到高度贊賞。

謝謝。

你關心XML文件中的所有內容嗎? 如果沒有,您可以使用StreamReader並從XML獲取文本並將其傳遞給數據庫。

如果您需要驗證XML是否正確,最好使用XmlReader

但是,將1GB的XML轉儲到數據庫中似乎有點奇怪,這個XML數據的目的是什么? 它有很多嵌套元素嗎? 也許你可以對它進行反序列化並將每個對象存儲在appropriet表中,這樣就可以實現更容易理解的設計。

您可以考慮使用一些方法來簡化/更好地設計軟件:

  • 是否一次在數據庫中出現多個XML文件?
  • 應用程序之間如何共享數據?
  • 你考慮過使用MemoryMappedFile嗎?
  • 是否可以將XML反序列化為實體並將其存儲為approprietly?

我懷疑如果有任何性能問題,它將與存儲過程和數據庫方面相關,而不是讀取文件。

為什么要將XML文件存儲在數據庫表中? 我建議使用不同的解決方案是合適的,但是如果不了解更多有關您正在嘗試做什么的詳細信息,則很難建議。

如果xml中的每個第一級元素都是記錄,即

<rootNode>
    <row>...</row>
    <row>...</row>
    <row>...</row>
</rootNode>

然后,您可以創建一個IDataReader實現,該實現讀取xml(通過XmlReader )並將每個作為記錄呈現,以使用SqlBulkCopy導入。 非常像我在這里的舊答案。

好處:

  • SqlBulkCopy數據導入數據庫最快方法
  • 將其剝離到記錄中可以適當地使用數據庫,從而允許索引和正確鍵入
  • 它不依賴於以原子方式通過線路的巨大BLOB(對於xml數據類型是必需的)

暫無
暫無

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

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