【发布时间】:2023-03-11 16:48:01
【问题描述】:
我们在 MVC3 项目中使用 Unity 作为 IoC 容器。我们刚刚安装了 dynatrace,它显示在 FileSystemWatcher.StartRaisingEvents 方法中花费的时间过多,特别是在 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 事件日志。
【问题讨论】:
-
嗯,
XmlConfigurator似乎是 log4net 的东西。你在使用 log4net 吗?我认为这是你的罪魁祸首,而不是 Unity。 -
是的,这就是我一直在寻找的地方。我们正在使用 log4net,它正在记录到一个文件,所以我认为这是罪魁祸首,但即使文件附加程序被注释掉,这些调用仍然存在。
-
@vcsjones - 你是对的 - log4net 配置了自己的配置文件(与 web.config 中的配置相比),因此它正在监视该文件的更改。如果您可以发表您的评论作为答案,我可以给您信用 - 谢谢!
标签: asp.net-mvc-3 unity-container ioc-container