我們在Unity MVC3項目中使用Unity作爲我們的IoC容器。我們只安裝了dynatrace,它在FileSystemWatcher.StartRaisingEvents方法中顯示了花費的時間,特別是在ReadDirectoryChangesW中。這似乎是造成糟糕表現的原因。Unity IoC在ReadDirectoryChangesW中花費大量時間
Unity爲什麼要監視文件系統?
Here's the call stack:
ChildActionExtensions.RenderAction
HttpServerUtility.Execute
HttpHandlerUtil+ServerExecuteHttpHandler.Wrap
UnityControllerFactory.CreateController
XmlConfigurator.ConfigureAndWatch
FileSystemWatcher.StartRaisingEvents
UnsafeNativeMethods.ReadDirectoryChangesW
這裏是UnityControllerFactoryCode
try
{
if (requestContext.RouteData.DataTokens.ContainsKey("area") && !string.IsNullOrWhiteSpace(requestContext.RouteData.DataTokens["area"].ToString()))
{
controllerName = string.Format("{0}/{1}", requestContext.RouteData.DataTokens["area"], controllerName);
}
controllerName = controllerName.ToLower();
return _container.Resolve<IController>(controllerName);
}
catch (Exception ex)
{
if (ex is ResolutionFailedException)
{
IMyLogger logger = _container.Resolve<IMyLogger>();
logger.Error(LogEventIdType.General, ex, "Is the '{0}' controller defined in the Unity Container via RegisterType (in lowercase) in UnityIocBootstrapConfigure?", new object[] {controllerName});
throw;
}
}
記錄器記錄到Windows事件日誌。
Hm,'XmlConfigurator'好像是一個log4net的東西。你在使用log4net嗎?我認爲那是你的罪魁禍首,而不是Unity。 – vcsjones
是的,那是我一直在尋找的地方。我們正在使用log4net,並且它正在記錄到一個文件,所以我認爲這是罪魁禍首,但即使在文件appender被註釋掉的情況下,這些調用仍然存在。 – sydneyos
@vcsjones - 你是對的 - log4net配置了自己的配置文件(vs web.config中的config),所以它正在監視那個文件的變化。如果你可以發表你的評論作爲答案,我可以給你信用 - 謝謝! – sydneyos