2012-04-17 15 views
5

私は長い時間の間、私のアプリケーションを実行したままにすると、メモリの問題に気付きます。実際にはメモリ不足例外が発生します。私は問題が何だったのか分かりませんでした。私はそれが再び実行され、私に気付くまで私は無知でした。HtmlAgilityPackを使用しているときのメモリの問題?

毎回html.LoadHtml(a_few_k_of_html);私はこのラインで漏れを取得します。私はHtmlAgilityPackが漏れていると思われます。私はそれをラップして使用して処分を試みましたが、それは存在しませんでした。その行で毎回発生するだけでなく、HtmlAgilityPackを代わりに使用するようにいくつかの領域を変更することを覚えていますparsing html with regex

HtmlAgilityPack自体を修正するのにはいかがですか?

+0

あなたのコードはhtml.LoadHtmlの結果への参照を保持していますか?あなたのコードはもはやそれを参照していないと確信していますか? –

+0

var htmlはその1つの関数のスコープのみを持ち、他の場所では使用されません。私はどこにでもそれを参照していない肯定的です。これはこれまでの私の最初のリークで、私はそれがHtmlAgilityPackバックエンドと関係があるかもしれないと思う。 @EricJ。 –

+0

これを簡単なテストプログラムで再現できますか?私は、Html Agility Packが漏れていることに驚いています。私は長時間実行しているプログラム(1日に何日も実行され、毎分何千ものページをダウンロードするWebクローラー)で使用し、漏れを気付かなかった。 –

答えて

2

同じ問題がありました。ドキュメントを処理した後、ドキュメントのインスタンスをnullに設定し、次にGC.Collect()に設定しました。問題は解決されました。

+0

GC.Collectを呼び出すのはいい考えです。 http://programmers.stackexchange.com/questions/276585/when-is-it-a-good-ide-to-force-garbage-collection –

+0

+1いいえ良い考えではありません。問題を引き起こすdllに直面すると、これは私のために修正されました。私の場合、私は300,000の文書からテキストを取り除きたいと思っていましたが、これが私の痛みの唯一の方法でした – Rippo

1

HtmlAgilityPack.HtmlDocumentLoad()LoadHtml()を使用してください。

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 
MemoryStream ms = new MemoryStream(Encoding.Default.GetBytes(a_few_k_of_html)); 
doc.Load(ms); 
ms.Close();// <-- Important 
//Do whatever you want with HtmlDocument 
関連する問題