应用程序间歇性地进入无响应

时间:2017-03-25 17:50:21

标签: c# winforms performance memory

我们有一个内置于 .Net 4.5(C#, Winforms) 的应用程序,该应用程序仅在一个生产环境中间歇性地NOt Responding

进入10 to 20 second.状态

我已经写了重要的日志。它会在加载大量用户控件时以及在完成数据提取调用时挂起。

它挂起的系统内存相当低2GB。我通过降低内存几乎在本地机器上重现了这种情况。我的问题是我可以选择避免这些问题。 应用程序内存确实会引发200 to 300 mb.

行为不一致。有时候完成一项任务需要30秒,下次几乎不需要3秒。 无响应状态通常在启动时出现。

我的最后一次尝试是我在启动时加载了重要的程序集,但我没有运气。

最后,请允许我告诉您,我们有多个第三方控件。

1 个答案:

答案 0 :(得分:0)

如果你担心内存分配,

使用Analyze菜单中的Performance Wizard的.NET Memory Allocation选项创建一个Performance Session,它将帮助您确定需要在代码中进行哪些更改以减少内存使用。

我们真的需要更多信息。但是有一些建议:

  

使用using关键字或在所有一次性对象上调用Dispose()   你完成了它们

     

确保在完成收听后取消注册事件处理程序   对于活动

如果您的申请中有很多计时器,

如果您没有在某处存储对它的引用,那么这只是System.Threading.Timer类的一个问题。它有几个构造函数重载,采用状态对象的重载很重要。 CLR关注该状态对象。只要在某处引用它,CLR就会将计时器保留在其计时器队列中,并且计时器对象不会被垃圾收集。大多数程序员都不会使用那个状态对象,MSDN文章肯定不会解释它的作用。

System.Timers.Timer是System.Threading.Timer类的包装器,使其更易于使用。特别是,只要启用了计时器,它就会使用该状态对象并保持对它的引用。