2010-09-10 54 views
5

我有一个WPF(.net 3.5 sp1)应用程序,它在启动时加载一堆数据(启动需要几秒钟),但在数据加载后性能良好。 当应用程序运行时,如果我在一段时间内(例如几个小时)没有触摸它,然后我切换它,它会非常缓慢地“醒来”。 我的问题:WPF应用程序从闲置回来时变慢

  1. 这是为什么?那是因为.Net释放了我从内存加载的大数据,它必须以某种方式恢复它?

  2. 即使我知道在应用程序最终完成之前我会隔离内存,我应该怎样做才能防止这种行为?

+1

刺在黑暗中,但我不知道它是不是操作系统本身将该内存投入交换文件(虚拟内存),然后必须从磁盘读回。 – Jay 2010-09-10 20:10:28

+1

你知道Jay,可能是。我想知道这是否是真正的原因,以及我能做些什么来防止这种情况发生,至少对于这个应用程序(强制它以更高优先级模式运行?)。谢谢你的评论。 – 2010-09-10 20:12:46

+1

你可以在这种情况下运行一个分析器吗?是的,我推荐[EQATEC](http://www.eqatec.com/tools/profiler/)。 – Zamboni 2010-09-12 14:38:01

回答

0

我可以看到两个出路:

  1. 访问所有缓存数据的线程从GUI中分离(这可能会是很多工作改写),
  2. 添加一些定时器触发通话这将始终有效(可能只是从缓存中获取一些随机数据),并且它会使您的应用程序保持非空闲状态,从而防止其内容转到页面文件。
+0

我喜欢你的第二个想法。谢谢。 – 2010-09-16 15:47:04

0

正如Jay所说,这几乎肯定会发生,因为应用程序的数据正在写入页面文件。

如果计算机处于您的控制之下,请尝试关闭页面文件。如果计算机有很多内存,并且一次不运行很多程序,则可能会发现实际上并不需要该页面文件。

+0

嗨,罗兰,电脑不在我的控制之下。用户的电脑。 – 2010-09-16 15:45:49

+0

那么你可以做的事情不多。您可以尝试周期性地运行应用程序的数据并触摸对象(如velijkoz建议的那样),但是您无法触摸所有内容。 GUI相关的东西仍然会被换出。 Windows不交换整个应用程序,它交换内存页面。 – 2010-09-17 04:08:35