我有一個C#庫,可以進行一些文件處理。我創建了一個使用該庫的控制檯和桌面應用程序,並在大約1分鐘內處理一個256MB文件。然後,我創建了一個WCF服務,該服務託管在Windows服務中,該服務使用相同的文件處理庫,但在從網站調用時處理相同的256mb文件需要10倍的時間。 Windows服務在具有管理員權限的域帳戶下運行。WCF服務託管在Windows服務運行10倍慢於控制檯應用程序
調用WCF服務的開銷非常快,但LoadFile方法需要更長的時間。我試圖通過
Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
無效,增加了啓動過程中的進程優先級。我已經在Win7 64位桌面系統(6GB),2003 XP 32位服務器(4GB)和2008 R2 32位服務器(4bg)上運行這項服務,所有這些服務都有類似的結果。控制檯和桌面應用程序各自在上述系統中大約1分鐘處理文件。這個過程似乎沒有受到內存限制並進入swapville。
是否Windows服務以某種方式進程受到限制?我會在IIS下運行WCF服務獲得更好的結果嗎?
編輯:我試着從網站調用庫目錄,這也比控制檯或桌面應用程序長10倍。
UPDATE:原來是Log4PostSharp。控制檯和桌面應用程序在配置文件中沒有任何log4net的痕跡,但網站和Windows服務沒有。有一個log4net TraceAppender默默地佔用了寶貴的CPU週期。
您是如何精確加載文件的?您是否嘗試使用分析器來查看瓶頸的確切位置(VS 2010 Ultimate包含分析器) – 2011-03-07 22:22:54
如果您還沒有這樣做,我建議將進程優先級恢復到正常狀態。修改流程優先級通常不會加速程序,並且可能會產生其他問題。 – 2011-03-07 22:23:52
@Davide:分析器也在Premium中。 +1;這是要走的路。 – 2011-03-07 22:29:27