Warum wird mein Programm 100% CPU unter nVidia NView verbrauchen?
Frage
Ich arbeite vor kurzem auf einem Windows-Programm, das manchmal nicht mehr reagiert werden würde, wenn sie durch eine große Liste von Elementen in einer Produktionsumgebung zu scrollen. Natürlich funktioniert es auf meinem Desktop in Ordnung. Die Produktionsumgebung ist:
- Windows XP basierte Workstation mit 2 Monitoren
- nVidia Grafiktreiber mit nView aktiviert
Bemerkenswert ist ein Dr. Watson-Stack-Trace erzeugt wird, wenn der Prozess beendet ist:
State Dump for Thread Id 0xef4 eax=00e3fff8 ebx=000000a0 ecx=00e00000 edx=00000000 esi=0003fff8 edi=00e40000 eip=00b920c2 esp=0012bcac ebp=00000000 iopl=0 nv up ei ng nz na pe cy cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00000283 \system32\nview.dll - function: nview!NVLoadDatabase 00b920a8 c80b0600 enter 0x60b,0x0 00b920ac 83c30f add ebx,0xf 00b920af 33f6 xor esi,esi 00b920b1 03f9 add edi,ecx 00b920b3 83e3f8 and ebx,0xfffffff8 00b920b6 3bcf cmp ecx,edi 00b920b8 89742414 mov [esp+0x14],esi 00b920bc 734c jnb nview!NVLoadDatabase+0xcaf (00b9210a) 00b920be 8bc1 mov eax,ecx 00b920c0 8b10 mov edx,[eax] 00b920c2 8b4004 mov eax,[eax+0x4] ds:0023:00e3fffc=00000000 00b920c5 89442414 mov [esp+0x14],eax 00b920c9 8bc2 mov eax,edx 00b920cb 2500000001 and eax,0x1000000 00b920d0 33ed xor ebp,ebp 00b920d2 0bc5 or eax,ebp 00b920d4 7414 jz nview!NVLoadDatabase+0xc8f (00b920ea) 00b920d6 8bc2 mov eax,edx 00b920d8 c1e008 shl eax,0x8 00b920db 8be8 mov ebp,eax 00b920dd c1f81f sar eax,0x1f ChildEBP RetAddr Args to Child 00000000 00000000 00000000 00000000 00000000 nview!NVLoadDatabase+0xc67
Warum hat dieses Problem nur in der Produktion auftreten?
Lösung
Das ist interessant, weil nView ein 3rd-Party-DLL zur Verfügung gestellt von NVidia ist. Buchungen im Internet über nview!NVLoadDatabase
deutet darauf hin, dass es ein nicht gepatchte Defekt in nview ist. Dies wird durch die Tatsache unterstützt, dass Explorer nutzt 100% CPU, wie sie durch diese Berichte bestätigt. Siehe: http://forums.nvidia.com/lofiversion/index.php? t36879.html
Eine detaillierte Untersuchung dieses Problems ist auf dieser Website zur Verfügung: http: //blogs.technet.com/marcelofartura/archive/2007/02/28/real-case-random-apps-running-100-cpu.aspx
Gemäß diesem Artikel ist der Hang aufgrund einer Endlosschleife in nview.dll. Obwohl die Montageanleitung und Registerwerte beschrieben Online nicht genau diejenigen, die in unserem Protokoll entspricht, waren sie nahe genug für mich zu dem Schluss, dass es das gleiche Problem.
, um das Problem zu umgehen, ich deaktiviert nView Desktop Manager (Rechtsklick auf den Desktop, wählen Sie nView Eigenschaften und klicken Sie deaktivieren im nView Desktop Manager groupbox). Bevor Sie dies tun konnte ich konsequent den Dreh reproduzieren. Doch nach nView deaktivieren kann ich nicht den Dreh raus reproduzieren. Somit scheint dies eine praktikable Abhilfe zu sein.
Wie auch immer, ich gepostet hier im Fall oben wird es jedem nützlich sein. Es hat mir eine Menge Ärger hinunter diesen eine Jagd.