gpt4 book ai didi

c# - 托管在 Windows 服务中的 WCF 服务运行速度比控制台应用程序慢 10 倍

转载 作者:可可西里 更新时间:2023-11-01 09:13:53 27 4
gpt4 key购买 nike

我有一个 C# 库可以进行一些文件处理。我创建了一个控制台和桌面应用程序,它使用该库并在大约 1 分钟内处理一个 256mb 的文件。然后,我创建了一个托管在 Windows 服务中的 WCF 服务,该服务使用相同的文件处理库,但在从网站调用时处理相同的 256mb 文件需要 10 倍的时间。 Windows 服务在具有管理员权限的域帐户下运行。

调用 WCF 服务的开销非常快,但 LoadFile 方法花费的时间要长得多。我尝试通过

在启动期间增加进程优先级
Process.GetCurrentProcess ().PriorityClass = ProcessPriorityClass.High;

没有用。我已经在 Win7 64 位桌面系统 (6gb)、2003 XP 32 位服务器 (4gb) 和 2008 R2 32 位服务器 (4bg) 上运行此服务,结果都相似。在上述系统上,控制台和桌面应用程序各自处理该文件大约需要 1 分钟。该进程似乎没有内存限制并进入 swapville。

Windows 服务是否以某种方式限制了进程?在 IIS 下运行 WCF 服务会获得更好的结果吗?

编辑:我尝试从网站调用库目录,这也比控制台或桌面应用程序花费的时间长 10 倍。

更新:原来是 Log4PostSharp。控制台和桌面应用程序在配置文件中没有任何 log4net 的痕迹,但网站和 Windows 服务却有。有一个 log4net TraceAppender 默默地消耗着宝贵的 CPU 周期。

最佳答案

我想不通为什么会发生您所描述的行为 - 它看起来确实很奇怪。由于您正在内存中处理一个相对较大的文件,垃圾收集器可能会影响它。您可以尝试更改垃圾收集器运行的模式,看看它是否有任何效果。

垃圾收集器有三种模式——工作站、服务器和并发。每一个都以不同的方式运行,并针对不同类型的应用程序进行了优化。工作站模式是默认模式,除非配置为使用其他模式,否则所有进程都使用这种模式运行。可以找到有关这些模式的更多信息 here .

尝试将垃圾收集器显式设置为使用服务器模式(尽管它只会对多处理器机器产生影响)。为此,请将以下内容放入您的 app.config 文件中:

<configuration>
<runtime>
<gcServer enabled="true" />
</runtime>
</configuration>

关于c# - 托管在 Windows 服务中的 WCF 服务运行速度比控制台应用程序慢 10 倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5225947/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com