0

このリンクを使用して BHO アプリケーションを作成しました。

上記の記事で入手したソースコードをビルドすると、CPU 使用率が 70 ~ 80% に増加します。

どうすればこれを減らすことができますか?

上記の記事では、Document complete イベント ハンドラーの代わりに、progresschange イベント ハンドラーを使用しました。

foreach ループでは、Web ページのすべてのタグのタグ名をチェックしていましたが、上記のコードをビルドしている間 (または dll を登録した後)、CPU 使用率が 10 ~ 80% から増加し続けていました。多くのデータ(要素)を含むWebページです.....

これを避けたいのですが、Web ページに存在するすべてのタグのすべてのタグ名を取得できる方法はありますか? この問題を回避できるような何かを提案してください。ありがとう... 問題を引き起こすコードは太字です。見つかったタグ要素ごとに、タグ要素のタグ名を含むメッセージ ボックスが表示されます。

問題が発生するコードは次のとおりです。

public void onProgressChange(int Progress, int ProgressMax) 
{    
    document = (HTMLDocument)webBrowser.Document; 
    foreach(IHTMLElement tempElement in (IHTMLElementCollection)document.documentElement.all)   
    {      
        System.Windows.Forms.MessageBox.Show(" Tagname:"+ tempElement.tagname);   
    }                 
}

public int SetSite(object site) 
{
    if (site != null)   
    {     
        webBrowser = (WebBrowser)site; 
        webBrowser.ProgressChange += new DWebBrowserEvents2_ProgressChangeEventHandler(this.onProgressChange);    
    }    
    else    
    { 
        webBrowser.ProgressChange = new DWebBrowserEvents2_ProgressChangeEventHandler(this.onProgressChange);
        webBrowser = null;     
    }

    return 0;
}

このイベントは繰り返し生成されます。CPU使用率を下げるには?

4

2 に答える 2

0

これは答えのない質問です。CPU 使用率の問題は、どのようにではなく、何をしたかの結果です。特にすべてのコレクションを歩いている場合、IEは犬です。アクセスするには、すべてのオブジェクトを .Net にマーシャリングする必要があることを忘れないでください。別の方法で問題に取り組むか、IE 以外のパーサーを使用して HTML を処理することをお勧めします。WebClient クラスを使用して HTML をロードし、その結果を任意のパーサーにフィードできます。簡単な Google 検索を実行すると、いくつかの代替パーサーが表示されます。

http://www.google.com/search?hl=en&rlz=1C1GGLS_enUS330US330&q=html+parser+C%23+.net&aq=f&oq=&aqi=

何らかの理由で IE に行き詰まっている場合は、document.all コレクションの foreach ステートメントに対する代替の回答を見つける必要があります。

于 2009-08-28T02:16:51.000 に答える