繁体   English   中英

为什么我的程序在nVidia NView下消耗100%的CPU?

[英]Why does my program consume 100% CPU under nVidia NView?

我最近正在开发一个Windows程序,当在生产环境中滚动浏览大量项目时,有时会变得无响应。 当然可以在我的桌面上正常工作。 生产环境为:

  • 基于Windows XP的工作站,带有2个监视器
  • 启用nView的nVidia视频驱动程序

值得注意的是,在进程终止时会产生Dr watson堆栈跟踪:

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

为什么仅在生产中出现此问题?

这很有趣,因为nView是NVidia提供的第三方DLL。 互联网上有关nview!NVLoadDatabase表明nview!NVLoadDatabase中存在未修补的缺陷。 这些报告证实了资源管理器使用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后,我无法重现挂起。 因此,这似乎是一个可行的解决方法。

无论如何,我将其张贴在这里,以防对任何人有用。 这让我悲痛欲绝。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM