我有一个C#库,用于进行一些文件处理。我创建了一个控制台和桌面应用程序,这些程序使用该库并在大约1分钟内处理了一个256MB的文件。然后,我创建了一个WCF服务,并将其托管在Windows服务中,该服务使用相同的文件处理库,但是当从网站调用时,处理相同的256MB文件需要花费10倍的时间。Windows服务在具有管理员权限的域帐户下运行。
调用WCF服务的开销非常快,但是LoadFile方法却需要更长的时间。我尝试通过在启动期间增加进程优先级来解决此问题:
Process.GetCurrentProcess ().PriorityClass = ProcessPriorityClass.High;
尝试了很多方法仍然不起作用。我在Win7 64位桌面系统(6GB),2003 XP 32位服务器(4GB)和2008 R2 32位服务器(4GB)上运行此服务,但效果相似。控制台和桌面应用程序在以上系统中处理文件约需1分钟。该过程似乎没有受到内存限制并进入交换区。
Windows服务是否受处理器限制?如果在IIS下运行WCF服务,是否会获得更好的结果?
编辑:我尝试从网站调用库目录,这也比控制台或桌面应用程序慢10倍。
更新:原来是Log4PostSharp。控制台和桌面应用程序的配置文件中没有任何log4net的痕迹,而网站和Windows服务则有。其中一个log4net TraceAppender正在默默地占用宝贵的CPU周期。