質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

2481閲覧

C# new HtmlAgilityPack.HtmlDocument();でインスタンス生成したオブジェクトの解放方法

GiveAHand

総合スコア286

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2016/07/13 08:02

C#でWebBrowserを使ったアプリケーションを作成しています。

WebBrowserに、Navigateで表示させたHTMLを、HtmlAgilityPack.HtmlDocumentでLoadして、いるのですが、ループの中で、HtmlAgilityPack.HtmlDocumentのnewを繰り返すと、ループ回数が多くなると、メモリ不足でエラーになります。

プログラム的には、webBrowserのDocumentCompletedで、

C#

1foreach (HtmlAgilityPack.HtmlNode data in datas) 2{ 3 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 4 doc.LoadHtml(data .InnerHtml.ToString()); 5 6 //読み込んだデータの処理 7 8}

と、このようにしているのですが、このときdatasの数が多いと、メモリ不足でエラーになってしまうので、なんとか毎回docを開放したいと思っておりますが、解放する方法がわからず困っております。

C#

1HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

このように定義したクラスのインスタンスは、どうやって開放したらいいのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

HtmlDocumentにnullを代入しておいて.Netのメモリ管理に丸投げするとかで逃げられるといいのですが..

たぶんHtmlAgilityPackの中で使われているStreamReaderが開放されてなくてメモリリークを起こしてるんじゃないでしょうかね
もしそうなら根本を直さないとダメでしょう

HtmlAgilityPackはオープンソースなので適宜自分で直して使うなど工夫も要るのでしょう
クオリティがメンテナの情熱(=プロジェクトに掛けることのできる手間=注ぐことのできる無償の愛)に大きく依存してしまうというオープンソース世代の良いところであり悪いとこでもありますね
もし直せたらその成果物を還元されるとみんなに喜ばれると思いますよ
ネットサービスの大手の偉いさんも自社で使うオープンソースプロジェクトには必ず貢献してそのプロジェクトを絶やさないようにしないとプロダクトの技術的負債が大きくなる的なお話をされていたのを聞いたことがあります

あと数年前のstackoverflowにも

nullを代入してGC.Collectで解決

みたいなのもありましたが、

  • とりあえず困ったらGC.Collect

ってのも禁物らしいです

投稿2016/07/13 20:20

dojikko

総合スコア3939

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GiveAHand

2016/07/15 10:07

dojikko様 厳しいのですが、そういう事なんですね。。。 仕方ないですね。 他の方法など模索してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問