从网络共享运行.net应用程序的性能问题

时间:2012-02-28 23:03:48

标签: c# .net performance network-share

我遇到Windows窗体(.net 4)应用程序的问题。我们的一个客户希望从网络共享运行它(我们的应用程序可以同时由20-300个用户使用)。我们可以通过将此行添加到app.config

来使其工作
<loadFromRemoteSources enabled="true" /> 

启动程序需要一些时间,用户可以使用一段时间。不幸的是,他们注意到当应用程序未使用一段时间并且他们想再次使用它时,响应非常缓慢(“唤醒”应用程序大约需要1-3分钟)。至少这是我从顾问那里听到的。

我可能会在下周一自己看到它,但首先我想知道:

  1. 这种行为是否正常,如果是,为什么?
  2. 我应该使用哪些工具来调查此问题?

1 个答案:

答案 0 :(得分:4)

对于非托管的exes,如果某个应用程序暂时没有被使用,它会被分页。包含代码的页面被简单地丢弃,因为它们可以从exe或dll重新加载。当您再次开始使用该应用程序时,它会被分页,这需要一段时间。如果应用程序从网络共享运行,则此分页将通过网络进行,并且可能非常慢。可以通过设置IMAGE_FILE_NET_RUN_FROM_SWAP标志(使用editbin /swaprun:net)来避免这种情况。

C#应用程序有点复杂。 exe和dll仍然是内存映射的,但所有代码都是在运行时从IL生成的。这个JITted代码将被分页到本地页面文件,但我想任何资源或元数据都将被丢弃,并根据网络的需求进行分页。这可能是缓慢的原因。

但不是推测,而是运行procmon并查看您的应用正在做什么。