c# – WCF服务托管在Windows服务运行比控制台应用程序慢10倍

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

调用WCF服务的开销非常快,但是LoadFile方法需要更长的时间.我尝试在启动过程中增加进程优先级

Process.GetCurrentProcess ().PriorityClass = ProcessPriorityClass.High;

无济于事我在Win7 64位桌面系统(6gb),2003 XP 32bit服务器(4gb)和2008 R2 32bit服务器(4bg)上运行此服务,结果类似.控制台和桌面应用程序在上述系统上大约1分钟内处理文件.该进程似乎没有内存限制并进入swapville.

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

编辑:我尝试从网站调用库目录,也比控制台或桌面应用程序长10倍.

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

解决方法

我不明白为什么你所描述的行为正在发生 – 它似乎很奇怪.由于您正在处理内存中较大的文件,垃圾收集器可能会影响它.您可以尝试更改垃圾收集器运行的模式,看是否有任何影响.

垃圾收集器有三种模式 – 工作站,服务器和并发.每个人以不同的方式行事,并针对不同类型的应用进行了优化.工作站模式是默认模式,并且是所有进程运行的,除非配置为使用别的东西.有关模式的更多信息可以找到here.

尝试明确地将垃圾回收器设置为使用服务器模式(它将仅对多处理器计算机有影响).为此,请将以下内容放在您的app.config文件中:

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

相关文章

项目中经常遇到CSV文件的读写需求,其中的难点主要是CSV文件...
简介 本文的初衷是希望帮助那些有其它平台视觉算法开发经验的...
这篇文章主要简单记录一下C#项目的dll文件管理方法,以便后期...
在C#中的使用JSON序列化及反序列化时,推荐使用Json.NET——...
事件总线是对发布-订阅模式的一种实现,是一种集中式事件处理...
通用翻译API的HTTPS 地址为https://fanyi-api.baidu.com/api...