0

MVC3プロジェクトのIoCコンテナとしてUnityを使用しています。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イベントログに記録します。

4

2 に答える 2

1

Unity自体はそのようなことをしません。実際、スタックトレースはUnityコードにはまったく含まれておらず、コントローラーファクトリ内にあります。

それを書いた人は誰でもファイルシステムウォッチャーを追加しました。ASP以来、これはかなりばかげていました。NETはすでにweb.configを監視しており、変更された場合はappdomainを再起動します。

于 2012-12-11T07:18:08.120 に答える
1

トレースはXmlConfigurator、log4netであるを指しています。log4netは、その構成をweb.configとは別のファイルに保存するため、ファイルシステムウォッチャーを起動して、ファイルが自分自身を再構成するように変更されたかどうかを確認します。

その場合、パフォーマンスの問題の原因はUnityではなくlog4netであるように思われます。

于 2012-12-11T23:53:05.317 に答える