2009-05-05 46 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後,我無法重現掛起。因此,這似乎是一個可行的解決方法。

無論如何,我在這裏發佈這個以防萬一它對任何人都有用。它引起了我很多悲痛的追逐。