我遇到Windows窗体(.net 4)应用程序的问题。我们的一个客户希望从网络共享运行它(我们的应用程序可以同时由20-300个用户使用)。我们可以通过将此行添加到app.config
来使其工作<loadFromRemoteSources enabled="true" />
启动程序需要一些时间,用户可以使用一段时间。不幸的是,他们注意到当应用程序未使用一段时间并且他们想再次使用它时,响应非常缓慢(“唤醒”应用程序大约需要1-3分钟)。至少这是我从顾问那里听到的。
我可能会在下周一自己看到它,但首先我想知道:
答案 0 :(得分:4)
对于非托管的exes,如果某个应用程序暂时没有被使用,它会被分页。包含代码的页面被简单地丢弃,因为它们可以从exe或dll重新加载。当您再次开始使用该应用程序时,它会被分页,这需要一段时间。如果应用程序从网络共享运行,则此分页将通过网络进行,并且可能非常慢。可以通过设置IMAGE_FILE_NET_RUN_FROM_SWAP标志(使用editbin /swaprun:net
)来避免这种情况。
C#应用程序有点复杂。 exe和dll仍然是内存映射的,但所有代码都是在运行时从IL生成的。这个JITted代码将被分页到本地页面文件,但我想任何资源或元数据都将被丢弃,并根据网络的需求进行分页。这可能是缓慢的原因。
但不是推测,而是运行procmon并查看您的应用正在做什么。