我有用VB.NET和目标Framework 1.1编写的单线程窗体窗体应用程序。该软件通过串行接口与外部电路板进行通信,主要由一个状态机组成,它运行一些测试,由一个带有定时器和50ms间隔的循环驱动。如何解决VB.NET 1.1应用程序的性能衰减问题?
用户界面上的反馈是通过测试过程中产生的一些自定义事件完成的。
引起我疯狂的问题是性能会随着时间的推移稍微下降,特别是在1200/1300测试操作之后。占用的内存不会随着时间增加,它只是CPU似乎对这个问题感兴趣。
奇怪的是,针对框架2.0和使用相同的代码,我没有这个问题。
我知道这很难不看代码,但你有什么建议我可以如何解决这个问题?
编辑:经过几次密集的工作后,我真的迷路了,应用程序开始放慢速度。选中的行与其进程相关,如果有帮助的话。
EDIT2:使用Windows任务管理器我检测到手柄计数器在每个操作结束时增加1。我不知道是不是原因,但是当手柄计数器达到大约1500个手柄时,应用程序开始减速。我检查了所有必要的RemoveHandler是在每次操作后调用的。任何想法?
EDIT3:我发现处理是由C++库我们使用与串行设备传送所产生的问题。它然后发生在.NET 1.1和.NET 2.0中。不同之处在于,如果目标.NET 1.1应用程序减速/冻结而不是.NET 2.0,则达到30000个以上的句柄而不会失去性能。现在我不知道这个问题是否真的是由这个丢失的句柄造成的,我会试着问C++库的开发人员来纠正这个问题,看看它是否解决了我在.NET 1.1上遇到的问题。
alt text http://img341.imageshack.us/img341/6923/process.png
@Chris。如果它适用于2.0,为什么你需要使用1.1?你有没有试过红门性能分析器(这是非常好的)。 – 2010-05-20 12:48:22
该工具已被编写在1.1和1.1是必需的框架。也许有一些可能转向框架2.0,但不确定。我将检查红色门探查器并希望它有帮助 – Drake 2010-05-20 14:02:22
峰值内存使用情况列告诉你什么?另外,看起来你正在阅读250MB的信息,你最近怎么做? – 2010-05-20 14:58:36