长时间不活动后,.NET应用程序非常慢

Ric*_*ral 5 .net c# performance

我不确定问题标题是否是最好的,但它是我能想到的最好的...

我有这个.NET(C#)应用程序,它启动Windows并保持打开,直到计算机关闭.应用程序停留在托盘上,然后单击托盘图标将其打开并以相同方式关闭它.

该应用程序一开始并不慢,它正常工作,没有问题.但是经过长时间的不活动,在很长一段时间内第一次再次显示它时会变得很慢.明白我的意思了吗.

例如,我无法使用/打开(单击托盘图标)几天,在那些日子之间我打开和关闭并使用了很多其他应用程序,也是重型应用程序,我可能已经休眠并重新启动计算机几次,当我需要再次打开我的应用程序,这很慢.使用几分钟后,它恢复正常并正常工作.

我相信这与内存管理有关,系统可能会释放我应用程序的大部分内存,因此其他程序可以更有效地使用它.也许.NET内存管理与它有关...

无论是什么原因,我可以做些什么来优化我的应用程序的问题?

Mic*_*ael 10

这几乎可以肯定是由于内存被分页到磁盘.

当您停止使用您的应用程序和其他应用程序或任务开始施加内存压力时,应用程序中的内存页面可以写入磁盘.当您再次尝试使用您的应用程序时,必须读入所有这些数据,从而导致您看到的停顿.

不幸的是,没有好的解决方案 - 如果您以管理员身份运行或拥有SeLockMemoryPrivilege,您可以将应用程序的某些部分锁定到物理内存中.您可以定期尝试"触摸"页面以将它们保存在物理内存中.不幸的是,这两个选项都会导致您的应用程序与系统上的其他应用程序进行严重交互 - 您的内存将被分页,因为其他内容需要物理内存.您可以尝试降低总体内存占用量,但在某些情况下仍会遇到此问题.有一些选项可以调整你的工作集大小,但操作系统可以自由地忽略这些,并且在很多情况下也是如此.


JP *_*oto 5

您可以使用.NET内存分析器来了解应用程序随着时间的推移对内存执行的操作.您可以检查是否有任何内容正在建立在您不期望的位置(集合,列表等)并导致您的内存占用增长.