首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF服务托管在中,运行速度比控制台应用程序慢10倍

WCF服务托管在中,运行速度比控制台应用程序慢10倍
EN

Stack Overflow用户
提问于 2011-03-07 22:17:27
回答 1查看 2.8K关注 0票数 10

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

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

代码语言:javascript
复制
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周期。

EN

回答 1

Stack Overflow用户

发布于 2011-03-07 23:13:06

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

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

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

代码语言:javascript
复制
<configuration>
    <runtime>
        <gcServer enabled="true" />
    </runtime>
</configuration>
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5225947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档