【发布时间】:2011-03-19 19:10:09
【问题描述】:
我的应用程序的启动行为非常奇怪。
应用程序第一次启动时,进程占用一个 CPU 内核(双核 50%,四核 25%)并且 RAM 消耗停止在特定值(每个启动相同,在其他机器上不同/不同在我们更改应用程序以进行测试时构建版本)。
如果我在第一个实例运行时启动另一个实例,第二个实例将正常启动。
我在应用程序中插入了一些日志记录,似乎应用程序在第一次显示 UI 元素时崩溃了。最初的日志记录在启动画面出现之前就结束了 - 删除启动画面后,它停止了,因为应该显示消息框控件。
问题发生在某些机器上,而不是全部。将相同的文件复制到另一台机器可以“修复”问题。如果我部署由我的工作站构建的调试编译版本,问题就会完全消失。
附加信息(3 月 18 日):所需的“挂起”实例数似乎取决于可用内核的数量。
如果机器在双核*系统上运行,第二个进程启动,第一个进程占用 50% CPU(= 1 core@100%)。如果机器在 四核 系统上运行,*第四个进程*会启动,前三个每个进程占用 25% 的 CPU(= 3 个核心@100%)。
更新(3 月 19 日): 所以...我们解决了! 一位同事用一些代码编写了一个线程管理器来等待某些东西。显示 UI 元素时调用此管理器。在非常慢的 VM 上运行调试版本或发布版本(运行良好的机器一直是非常繁忙的机器上的虚拟机)似乎可以改变时间并使其正常工作。
他说他实施了某种超时来修复它。
我将在周一仔细研究他的解决方案(以及为什么需要这样奇怪的事情)并在此处发布更新,以便为我的问题提供适当的解决方案以供关注的访问者使用。
赏金献给 Stephen Chung,感谢大家的帮助。
【问题讨论】:
-
应用程序是否总是在同一台机器上失败?您的目标是哪个 .NET 版本?所有机器上的 .NET 版本/服务包都相同吗?
-
同样的机器,我们的目标是 .net 4.0。所有机器上安装的 .net 版本均为 3.5 SP1 和 4.0(完整)
-
还有一件事;所有机器上的操作系统都一样吗?
-
我们在 Win7 和 WinXP SP3 机器上遇到了这个问题。
-
也许您应该创建一个测试应用程序并一个一个地添加您在失败的应用程序中拥有的相同组件。希望你能看到它何时失败,从而找到罪魁祸首..