2009-05-05 49 views
0

我最近正在开发一个windows程序,当在一个生产环境中滚动浏览大量项目时,它有时会变得没有反应。当然,它在我的桌面上工作正常。生产环境是:为什么我的程序在nVidia NView下消耗100%的CPU?

    用2台显示器
  • 基于Windows XP工作站启用
  • NVIDIA显卡驱动程序与的nView

值得注意的是当过程结束产生的华生医生堆栈跟踪:

 
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 

为什么这个问题只发生在生产中?

回答

6

这很有趣,因为nView是由NVidia提供的第三方DLL。在互联网上发布有关nview!NVLoadDatabase的消息表明nview中有一个未修补的缺陷。正如这些报告所证实的,这得到了探险家使用100%CPU的事实的支持。请参阅:http://forums.nvidia.com/lofiversion/index.php?t36879.html

这个问题的详细调查此站点上: http://blogs.technet.com/marcelofartura/archive/2007/02/28/real-case-random-apps-running-100-cpu.aspx

按这篇文章,恒生是由于nview.dll一个无限循环。尽管在线描述的汇编指令和寄存器值与我们的日志中的值不完全一致,但它们足够接近我的结论,它是同样的问题。

要解决此问题,我禁用了nView桌面管理器(右键单击桌面上的nView属性,然后在nView桌面管理器组框中单击禁用)。在做这件事之前,我能够始终如一地重现这一悬念。但是,禁用nView后,我无法重现挂起。因此,这似乎是一个可行的解决方法。

无论如何,我在这里发布这个以防万一它对任何人都有用。它引起了我很多悲痛的追逐。