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

4

我在使用Windows Forms (.net 4) 应用程序时遇到了问题。我们的一个客户希望从网络共享中运行它(我们的应用程序可以同时被20-300个用户使用)。我们通过将以下这行代码添加到app.config文件中,使其能够正常运行:

<loadFromRemoteSources enabled="true" /> 

启动程序需要一点时间,用户一段时间后就可以使用。遗憾的是,他们注意到当应用程序长时间不用,然后想要再次使用时,响应非常缓慢(需要大约1-3分钟才能“唤醒”应用程序)。至少这是我们顾问所说的。

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

  1. 这种情况正常吗?如果是,为什么?
  2. 我应该使用什么工具来调查这个问题?

从本地磁盘“唤醒”该应用程序需要多长时间? - H H
当应用程序安装并在客户机上运行时,我们没有注意到这种(冻结)行为。 - krolik
1个回答

4
对于未管理的exe文件,如果应用程序一段时间没有被使用,它将被分页。包含代码的页面将被简单地丢弃,因为它们可以从exe或dll重新加载。当您再次开始使用该应用程序时,它将被分页并需要花费一些时间。如果应用程序是从网络共享运行的,则此分页过程将在网络上进行,速度可能非常慢。可以通过设置IMAGE_FILE_NET_RUN_FROM_SWAP标志(使用editbin /swaprun:net)来避免这种情况。
C#应用程序有点更复杂。exe和dll仍然是内存映射的,但所有代码都是从IL在运行时生成的。这个JIT的代码将被分页到本地页面文件中,但我猜任何资源或元数据都将被丢弃,并按需从网络分页。这可能解释了缓慢的原因。
但与其猜测不如运行procmon,看看您的应用程序在做什么。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接