2009-05-05 4 views
0

Ich habe kürzlich an einem Windows-Programm gearbeitet, das manchmal nicht mehr reagiert, wenn ich durch eine große Liste von Elementen in einer Produktionsumgebung scrolle. Natürlich funktioniert es gut auf meinem Desktop. Die Produktionsumgebung ist:Warum verbraucht mein Programm 100% CPU unter nVidia NView?

  • Windows XP basierte Workstation mit 2 Monitoren
  • nVidia Grafiktreiber mit nView

Bemerkenswert ist ein Dr. Watson-Stack-Trace erzeugt aktiviert, 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 ist dieses Problem nur in der Produktion aufgetreten?

Antwort

6

Das ist interessant, weil nView eine DLL von Drittanbietern ist, die von NVidia bereitgestellt wird. Einträge im Internet über nview!NVLoadDatabase deuten darauf hin, dass es in NView einen ungepatchten Fehler gibt. Dies wird durch die Tatsache unterstützt, dass der Explorer 100% CPU verwendet, wie diese Berichte bestätigen. Siehe: http://forums.nvidia.com/lofiversion/index.php?t36879.html

Eine detaillierte Untersuchung dieses Problems auf dieser Seite verfügbar: http://blogs.technet.com/marcelofartura/archive/2007/02/28/real-case-random-apps-running-100-cpu.aspx

Gemäß diesem Artikel, der Hang zu einer Endlosschleife in nview.dll zurückzuführen ist. Obwohl die online beschriebenen Montageanweisungen und Registerwerte nicht genau mit denen in unserem Protokoll übereinstimmen, waren sie nah genug, um zu dem Schluss zu kommen, dass es sich um das gleiche Problem handelt.

Um das Problem zu umgehen, deaktivierte ich den nView Desktop Manager (Klicken Sie mit der rechten Maustaste auf den Desktop, wählen Sie nView-Eigenschaften, und klicken Sie im Gruppenrahmen nView Desktop Manager auf Deaktivieren). Zuvor konnte ich den Hang konsequent reproduzieren. Nach dem Deaktivieren von nView konnte ich den Hang jedoch nicht reproduzieren. Daher scheint dies eine praktikable Lösung zu sein.

Wie auch immer, ich postete das hier, falls es für irgendjemanden nützlich sein sollte. Es verursachte mir eine Menge Leid, diesen hier zu verfolgen.

Verwandte Themen