我有一个C#库,它可以处理一些文件。我创建了一个控制台和桌面应用程序,它使用这个库,并在大约1分钟内处理256 in文件。然后,我创建了一个托管在windows服务中的WCF服务,该服务使用相同的文件处理库,但是从网站调用相同的256 to文件需要花费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周期。
发布于 2011-03-07 23:13:06
我想不出你所描述的行为为什么会发生--这看起来确实很奇怪。但是,由于您正在处理内存中的一个相对较大的文件,垃圾收集器可能会影响它。您可以尝试更改垃圾收集器运行的模式,以查看它是否有任何效果。
垃圾收集器有三种模式-工作站、服务器和并发。每个程序都以不同的方式运行,并针对不同类型的应用程序进行了优化。工作站模式是默认模式,是所有进程使用的模式,除非配置为使用其他方式。有关模式的更多信息可以找到这里。
尝试显式设置垃圾收集器以使用服务器模式(不过,它只会对多处理器计算机产生影响)。为此,将以下内容放入您的app.config文件:
<configuration>
<runtime>
<gcServer enabled="true" />
</runtime>
</configuration>https://stackoverflow.com/questions/5225947
复制相似问题