ゾーン設定

ヤフオク巡回VBAはCOM経由でIEを制御しているのだが、最近は数時間〜半日程度でIEが落ちてしまい巡回プログラムが中断してしまい涙目。ということが何回もあり困っている。
タスクマネージャを見るとIE仮想メモリが2GB近くまで膨れ上がっているので一応落ちる兆しは分かるんだけど、どうもうまくない。


Google ToolbarをとかIE Developer Toolbarとかアドオン系を外してみたけど改善せず。
UMDH(User Mode Dump Heap)を使ってヒープの状況を調べてみると、どうもJScript関係でやたらメモリリークしてる感じ。

// _NT_SYMBOL_PATH set by default to C:\WINDOWS\symbols
//                                                                          
// Each log entry has the following syntax:                                 
//                                                                          
// + BYTES_DELTA (NEW_BYTES - OLD_BYTES) NEW_COUNT allocs BackTrace TRACEID 
// + COUNT_DELTA (NEW_COUNT - OLD_COUNT) BackTrace TRACEID allocations      
//     ... stack trace ...                                                  
//                                                                          
// where:                                                                   
//                                                                          
//     BYTES_DELTA - increase in bytes between before and after log         
//     NEW_BYTES - bytes in after log                                       
//     OLD_BYTES - bytes in before log                                      
//     COUNT_DELTA - increase in allocations between before and after log   
//     NEW_COUNT - number of allocations in after log                       
//     OLD_COUNT - number of allocations in before log                      
//     TRACEID - decimal index of the stack trace in the trace database     
//         (can be used to search for allocation instances in the original  
//         UMDH logs).                                                      
//                                                                          

  1. 712de6 ( 717dc0 - 4fda) cc8 allocs BackTrace09422
  2. cb1 ( cc8 - 17) BackTrace09422 allocations
ntdll!RtlDebugAllocateHeap+000000E1 ntdll!RtlAllocateHeapSlowly+00000044 ntdll!RtlAllocateHeap+00000E64 msvcrt!free+000001AE msvcrt!free+000001CC msvcrt!malloc+00000027 scriptproxy!DllGetClassObject+00000DD4 scriptproxy!DllGetClassObject+00000F0F mshtml!???+00000000 : 7E428983 mshtml!???+00000000 : 7E42882C mshtml!???+00000000 : 7E428918 mshtml!???+00000000 : 7E426E31 Allocations for trace BackTrace09422: 1C039E80
  1. 3ac0bc ( 3ac0bc - 0) 2863 allocs BackTrace16738
  2. 2863 ( 2863 - 0) BackTrace16738 allocations
ntdll!RtlDebugAllocateHeap+000000E1 ntdll!RtlAllocateHeapSlowly+00000044 ntdll!RtlAllocateHeap+00000E64 msvcrt!free+000001AE msvcrt!free+000001CC msvcrt!malloc+00000027 JScript!???+00000000 : 75BA6F6F JScript!???+00000000 : 75BA6328 JScript!???+00000000 : 75BA63DA JScript!???+00000000 : 75BA5B91 JScript!???+00000000 : 75BA5BBF JScript!???+00000000 : 75BA56B5 JScript!???+00000000 : 75BA5824 JScript!???+00000000 : 75BA450A JScript!DllGetClassObject+00004BA6 JScript!DllGetClassObject+000032A7 JScript!???+00000000 : 75BA585E JScript!DllGetClassObject+000032FB JScript!???+00000000 : 75BA450A JScript!DllGetClassObject+00005183 JScript!???+00000000 : 75BA585E JScript!DllGetClassObject+000088E4 JScript!???+00000000 : 75BA450A JScript!DllGetClassObject+00005183 JScript!???+00000000 : 75BA585E JScript!DllGetClassObject+000088E4 JScript!???+00000000 : 75BA450A JScript!DllGetClassObject+00005183 JScript!???+00000000 : 75BA585E JScript!???+00000000 : 75BA4D0F JScript!???+00000000 : 75BA450A JScript!???+00000000 : 75BA58D1 Allocations for trace BackTrace16738: 1C03BE90
  1. 1ef620 ( 1ef620 - 0) 286d allocs BackTrace16735
  2. 286d ( 286d - 0) BackTrace16735 allocations
ntdll!RtlDebugAllocateHeap+000000E1 ntdll!RtlAllocateHeapSlowly+00000044 ntdll!RtlAllocateHeap+00000E64 msvcrt!free+000001AE msvcrt!free+000001CC msvcrt!operator new+0000000F JScript!DllGetClassObject+0000481B JScript!DllGetClassObject+00004B66 JScript!DllGetClassObject+000032A7 JScript!???+00000000 : 75BA585E JScript!DllGetClassObject+000032FB JScript!???+00000000 : 75BA450A JScript!DllGetClassObject+00005183 JScript!???+00000000 : 75BA585E JScript!DllGetClassObject+000088E4 JScript!???+00000000 : 75BA450A JScript!DllGetClassObject+00005183 JScript!???+00000000 : 75BA585E JScript!DllGetClassObject+000088E4 JScript!???+00000000 : 75BA450A JScript!DllGetClassObject+00005183 JScript!???+00000000 : 75BA585E JScript!???+00000000 : 75BA4D0F JScript!???+00000000 : 75BA450A JScript!???+00000000 : 75BA58D1 JScript!???+00000000 : 75BA585E JScript!DllGetClassObject+00005911 JScript!???+00000000 : 75BA56B5 JScript!???+00000000 : 75BA4478 JScript!DllGetClassObject+000088E4 JScript!???+00000000 : 75BA450A JScript!???+00000000 : 75BA434F Allocations for trace BackTrace16735: 1C03BDC0
  1. 1aab98 ( 1ab9c4 - e2c) 3017 allocs BackTrace04338
  2. 3004 ( 3017 - 13) BackTrace04338 allocations
ntdll!RtlDebugAllocateHeap+000000E1 ntdll!RtlAllocateHeapSlowly+00000044 ntdll!RtlAllocateHeap+00000E64 SelectorObjectAPI!DllUnregisterServer+000004CD Allocations for trace BackTrace04338: 167B6FD8
  1. 199060 ( 199060 - 0) 2884 allocs BackTrace16737
  2. 2884 ( 2884 - 0) BackTrace16737 allocations
ntdll!RtlDebugAllocateHeap+000000E1 ntdll!RtlAllocateHeapSlowly+00000044 ntdll!RtlAllocateHeap+00000E64 msvcrt!free+000001AE msvcrt!free+000001CC msvcrt!malloc+00000027 JScript!???+00000000 : 75BAADDE JScript!???+00000000 : 75BA63DA JScript!???+00000000 : 75BA5B91 JScript!???+00000000 : 75BA5BBF JScript!???+00000000 : 75BA56B5 JScript!???+00000000 : 75BA5824 JScript!???+00000000 : 75BA450A JScript!DllGetClassObject+00004BA6 JScript!DllGetClassObject+000032A7 JScript!???+00000000 : 75BA585E JScript!DllGetClassObject+000032FB JScript!???+00000000 : 75BA450A JScript!DllGetClassObject+00005183 JScript!???+00000000 : 75BA585E JScript!DllGetClassObject+000088E4 JScript!???+00000000 : 75BA450A JScript!DllGetClassObject+00005183 JScript!???+00000000 : 75BA585E JScript!DllGetClassObject+000088E4 JScript!???+00000000 : 75BA450A JScript!DllGetClassObject+00005183 JScript!???+00000000 : 75BA585E JScript!???+00000000 : 75BA4D0F JScript!???+00000000 : 75BA450A JScript!???+00000000 : 75BA58D1 JScript!???+00000000 : 75BA585E Allocations for trace BackTrace16737: 1C03BE38  ・  ・  ・


ヤフオクの改悪でJavaScriptも増えたりしてるようだからこの辺が影響しているのかもしれない。とりあえずアクティブスクリプトを外して様子を見ることにした。


...と言ってもIEにはNoScriptみたいな便利なアドオンがないのでゾーンで設定してみた。


まず*.yahoo.co.jpを制限付きゾーンに設定してみる。
cookieが無効になってしまうのでログインできなくなってしまった。これはダメだ。


次にahoo専用の隔離ゾーンを作ってみることに。
(1)レジストリエディタでインターネットゾーン設定をエクスポートする

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3]

(2)エクスポートしたレジストリデータで、キー名を3(インターネットゾーン)から9(既存のゾーン番号とかぶらない適当な数字)に書き換える

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\9]

(3)アクティブスクリプトを無効にする

"1400"=dword:00000003

(4)ついでにActiveXも無効にする

"1200"=dword:00000003

(5)レジストリエディタで書換えたレジストリをインポートする
(6)yahoo.co.jpをゾーン9に設定する

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\yahoo.co.jp]
"*"=dword:00000009


コンパネのゾーン設定には出てこないが、ちゃんと動作しているようだ。
しばらくこれで様子を見てみることにする。