2016-05-10 96 views
0

我想知道什麼是在使用F#類型提供了良好做法,類提供商和大型XML文件

我有一個XML文件(25Mo +),我認爲這不會是一個問題,但我的Visual Studio是痛苦很多。通常最好的做法是用最少的數據定義完整的XML模板,然後再加載內容?

如果我們加載一個帶有可選節點的大文件,類型將由最完整的一個推斷出來?

感謝

+1

上分叉並嘗試購買我的回購副本。對於大型的XML文件,最好不要使用任何將整個內容加載到內存中的工具。 'XmlReader'可能是要走的路,因爲它允許您在任何給定時間選擇性地只加載您實際需要的文檔部分。 –

+0

謝謝@JoelMueller我知道他們是一個大小限制,但我沒有想到,一個25莫將已經太大了:( – rad

+0

一個類似的問題之前幾個小時問了這個:http://stackoverflow.com/ q/37135965/126014這是功課嗎? –

回答

2

XmlProvider類提供商是基於XDocument(LINQ到XML),所以它總是需要讀取文件到內存中。但是,可能會由於模式推斷而導致額外的開銷,您可以避免這種開銷。因此,如果LINQ to XML可以讀取25MB文件(我不確定,請嘗試在文件上使用XDocument.Load),那麼您可以使用類型提供程序。

假設big.xml是您的大文件,您可以嘗試從文件中刪除一些元素(以便所有結構都在那裏,但它更小)並創建small.xml。然後你可以使用:

type X = XmlProvider<"small.xml"> 
let data = X.Load("big.xml") 

這將只運行在較小的文件架構推斷(這在Visual Studio後臺運行),然後嘗試讀取使用LINQ to XML更大的文件。這只是讀取文件,所以如果LINQ to XML可以讀取25MB文件,這將工作。在理想情況下,我們可能會在類型提供程序上有一些變化,它可以在XmlReader或類似的東西上工作 - 這可以重用一些F#數據基礎架構,但它仍然會很多工作(打開issue at F# Data有興趣貢獻!)