1

UrlHistoryWrapper クラスを使用して、データベースから値を取得し、それらを Internet Explorer の履歴に挿入しようとしています。条件を数千単位に設定するforとこのエラーが発生しますが、for 条件を 100 未満に設定すると正常に実行されます。メモリ使用量を確認しましたが、問題は発生しないはずです。chrome.URLs と firefox.URLs に何千もの値がある場合、このコードを実行できるようにするにはどうすればよいですか?

これは私のコードです:

UrlHistoryWrapperClass urlHistory;
        UrlHistoryWrapperClass.STATURLEnumerator enumerator;
        List<STATURL> list = new List<STATURL>();
        urlHistory = new UrlHistoryWrapperClass();
        enumerator = urlHistory.GetEnumerator();
        bool display = false;
        chrome.GetHistory(display);
        for (int i = 0; i < chrome.URLs.Count; i++ )
        {
            URL url = chrome.URLs[i];
            urlHistory.AddHistoryEntry(url.url, url.title, ADDURL_FLAG.ADDURL_ADDTOHISTORYANDCACHE);
        }
        Firefox firefox = new Firefox();
        firefox.GetHistory(display:false);
        foreach (URL url in firefox.URLs)
        {
            MessageBox.Show(url.url);

            urlHistory.AddHistoryEntry(url.url, url.title, ADDURL_FLAG.ADDURL_ADDTOHISTORYANDCACHE);
        }

そして、これは私のエラーです:

** * **例外テキスト** * **** System.Runtime.InteropServices.COMException (0x80070008): このコマンドを処理するのに十分な記憶域がありません。(HRESULT からの例外: 0x80070008) UrlHistoryLibrary.IUrlHistoryStg2.AddUrl (文字列 pocsUrl、文字列 pocsTitle、ADDURL_FLAG dwFlags) で UrlHistoryLibrary.UrlHistoryWrapperClass.AddHistoryEntry (文字列 pocsUrl、文字列 pocsTitle、ADDURL_FLAG dwFlags) で Namespace.IE.SyncIE() で\Users\Chris\documents\visual studio 2010\Projects\TestURLGUI4\TestURLGUI4\URLHistory.cs: C:\Users\Chris\documents\visual studio 2010\Projects\TestURLGUI4\TestURLGUI4 の Namespace.Program.SyncAll() の行 270 \URLHistory.cs: C:\Users\Chris\documents\visual studio 2010\Projects\TestURLGUI4\TestURLGUI4\Form1.cs の TestURLGUI2.Form1.button11_Click(Object sender, EventArgs e) の 152 行目: System.Windows の 247 行目.

編集:

ここに私の新しいコードがあります:

    for (var i = 0; i < firefox.URLs.Count; i++ )
    {
        URL url = firefox.URLs[i];
        urlHistory.AddHistoryEntry(url.url, url.title, ADDURL_FLAG.ADDURL_ADDTOHISTORYANDCACHE);
        Thread.Sleep(3);
        form.label1.Text = i + "/" + firefox.URLs.Count;
      //  MessageBox.Show(url.url);
        Application.DoEvents();
    }

このコードを使用すると、このエラーを発生させずに 8447 まで上げることができますが、その後スローされます。

私は他の誰かにこれをやらせてもらいました、そしてこれは彼が言ったことです:

コードを試してみたところ、追加できる URL レコードの数に制限があるようです。次の手順を実行しました。

  1. Internet Explorer で、アクセスした Web サイトの履歴を消去します。
  2. 私はあなたのコードを試しました。
  3. COMException (0x80070008) が発生しました: このコマンドを処理するのに十分なストレージがありません。私(Windows 7、64ビット)の場合、レコード番号41021で例外がスローされます。
  4. あなたのコードをもう一度試してみましたが、まったく同じ例外が発生しました。今回は、レコードが追加されていません。URL レコードを再度追加するには。Internet Explorer で Web サイトの履歴を消去する必要があります。問題を解決する方法が見つかりませんでした。

URLhistoryWrapper のソース コードは、この CodeProject プロジェクトで見つけることができます。

4

1 に答える 1

3

ここに私が見つけた解決策があります。U を実行する必要があります

foreach (URL url in firefox.URLs)
    {
        MessageBox.Show(url.url);

        urlHistory.AddHistoryEntry(url.url, url.title, ADDURL_FLAG.ADDURL_ADDTOHISTORYANDCACHE);
    }

別のスレッドのクロムのものなど。このような:

Thread testthread = new Thread(SynceFirefoxToIE);
        testthread.Name = "FirefoxToIESynceThread";
        testthread.Start();


    }

    public void SynceFirefoxToIE() 
    {
        foreach (URL url in firefox.URLs)
      {

         urlHistory.AddHistoryEntry(url.url, url.title, ADDURL_FLAG.ADDURL_ADDTOHISTORYANDCACHE);
      }

    }
于 2012-11-07T01:23:38.913 に答える