2016-05-10 8 views
0

私は、グッドプラクティスは、F#でタイププロバイダを使用しているものをタイププロバイダと大きなXMLファイル

を疑問に思って、私はXMLファイル(25Mo +)を持って、私はそれは問題にならないだろうと思ったが、私のVisual Studioがあります多くのロルに苦しんでいる。通常、データの最小限のXMLの完全なテンプレートを定義し、後でコンテンツをロードするのが良い方法ですか?

オプションのノードで大きなファイルを読み込むと、タイプは最も完全なもので推論されますか?

おかげ

+1

大きなXMLファイルでは、全体をメモリにロードするツールを使用しない方がよい場合があります。 'XmlReader'は、いつでも必要なドキュメントの部分だけを選択的に読み込むことができるので、移動する方法かもしれません。 –

+0

ありがとう@JoelMueller私はそれらがサイズ制限であることを知っていましたが、私は25MOがすでに大きすぎるとは考えていませんでした:( – rad

+0

これの数時間前に同様の質問がありました:http://stackoverflow.com/ q/37135965/126014この宿題はありますか? –

答えて

2

XmlProviderタイププロバイダはXDocument(XMLにLINQ)に基づいて、それは常にメモリにファイルを読むために必要があります。ただし、スキーマの推論によってオーバーヘッドが発生する可能性があります。これは避けることができます。だから、もしLINQ to XMLが25MBのファイルを読むことができれば(確かではありませんが、XDocument.Loadをファイルに使ってみてください)、タイププロバイダを使うことができます。

大きなファイルであると仮定すると、ファイルからいくつかの要素を削除することができます(すべての構造はそこにありますが、より小さくなります)。small.xmlを作成してください。次に、あなたが使用することができます。

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

これは、それがXMLにLINQを使用して大きなファイルを読み込もうとし、その後(Visual Studioでバックグラウンドで実行されます)と小さいファイルのスキーマ推論を実行します。これはファイルを読み込むだけなので、LINQ to XMLが25MBのファイルを読み取ることができれば、これは動作します。

XmlReaderなどで動作するタイププロバイダにはいくつかのバリエーションがありますが、これはF#データインフラストラクチャの一部を再利用することができますが、依然として多くの作業が必要です(issue at F# Dataを開いてください寄付に興味があります!)

関連する問題