【问题标题】:Performance issues with .net application running from network share从网络共享运行的 .net 应用程序的性能问题
【发布时间】:2012-02-28 23:03:48
【问题描述】:

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

<loadFromRemoteSources enabled="true" /> 

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

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

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

【问题讨论】:

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

标签: c# .net performance network-share


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多