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 レコードの数に制限があるようです。次の手順を実行しました。
- Internet Explorer で、アクセスした Web サイトの履歴を消去します。
- 私はあなたのコードを試しました。
- COMException (0x80070008) が発生しました: このコマンドを処理するのに十分なストレージがありません。私(Windows 7、64ビット)の場合、レコード番号41021で例外がスローされます。
- あなたのコードをもう一度試してみましたが、まったく同じ例外が発生しました。今回は、レコードが追加されていません。URL レコードを再度追加するには。Internet Explorer で Web サイトの履歴を消去する必要があります。問題を解決する方法が見つかりませんでした。
URLhistoryWrapper のソース コードは、この CodeProject プロジェクトで見つけることができます。