4

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

<loadFromRemoteSources enabled="true" /> 

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

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

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

1 回答 1

4

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

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

但与其推测,不如运行procmon并查看您的应用程序在做什么。

于 2012-02-28T23:48:48.180 回答