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

前端之家收集整理的这篇文章主要介绍了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>

猜你在找的C#相关文章