Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我如何衡量依赖项的构建时间?_C#_Asp.net Mvc_Visual Studio_Profiling_Autofac - Fatal编程技术网

C# 我如何衡量依赖项的构建时间?

C# 我如何衡量依赖项的构建时间?,c#,asp.net-mvc,visual-studio,profiling,autofac,C#,Asp.net Mvc,Visual Studio,Profiling,Autofac,我正在使用一个使用C#和ASP.NETMVC5编写的开源电子商务系统。该软件包大量使用autofac和IoC。它提供了一个插件体系结构,使用该电子商务包的开发人员可以使用该体系结构创建插件,并且它使用该插件体系结构本身 在一些非常神秘的情况下(不仅仅是当应用程序域回收时),执行页面加载需要整整一分钟的时间。我已经挣扎了一段时间,想知道是什么花了这么长时间 我无法使用内置的web服务器从Visual Studio中运行应用程序,甚至无法将Visual Studio调试器附加到运行它的IIS进程。因

我正在使用一个使用C#和ASP.NETMVC5编写的开源电子商务系统。该软件包大量使用autofac和IoC。它提供了一个插件体系结构,使用该电子商务包的开发人员可以使用该体系结构创建插件,并且它使用该插件体系结构本身

在一些非常神秘的情况下(不仅仅是当应用程序域回收时),执行页面加载需要整整一分钟的时间。我已经挣扎了一段时间,想知道是什么花了这么长时间

我无法使用内置的web服务器从Visual Studio中运行应用程序,甚至无法将Visual Studio调试器附加到运行它的IIS进程。因此,我无法使用需要Visual Studio的探查器

我已经设法让《一瞥》工作了,但《一瞥》并没有捕捉到需要很长时间的事件。在时间行中,它显示“启动请求”,需要0毫秒,然后7到50秒后,下一个事件开始,例如,“Authorization:Home.Index”,它表示需要0.01毫秒

在这7到50秒的时间间隔内,到底发生了什么?我怎么才能知道呢

这里有一个有点奇怪的线索:今天,在我们完全没有意识到任何变化之后,当浏览器位于我们的内部网络上时,问题或多或少地突然消失了(大部分时间,至少暂时消失了),但当浏览器位于我们网络之外的计算机上时,问题仍然存在。这就好像某个插件正在进行某种DNS查找,其内部所用的时间(成功或失败)要比外部所用的时间少得多

所以可以想象,一个控制器正在被实例化,来自某个插件或其他插件的某个依赖项正在构建时进行某种网络查找或类似的操作。因此,我试图找出如何衡量MVC构建家庭控制器的每个依赖项所需的时间。到目前为止,我还没有找到解决办法


我想我可以跟踪每个依赖项的所有实现,找出最终使用的实现,并将日志消息放入它们的构造函数代码中。除了一些插件不提供源代码。至少我可以为那些这样做的人这样做,但是否有一些探查器或工具我可以使用,它不需要Visual Studio,并且可以与在IIS下运行的ASP.NET MVC进程一起使用?

注入的深度有多深,每个类中有多少方法?我们对具有许多注入依赖项的类有一个问题,每个类都有几个注入依赖项,而Unity正在构建所有这些依赖项--一直向下--即使对于当前请求中没有调用的方法也是如此。一种解决方案是通过注入
Func
s或
lazy
s而不是接口本身来使用惰性构造。不过,更好的解决方案可能是重构类。也许您可以让我们知道您使用的是哪个电子商务平台,这可能有助于诊断问题。特别是当问题来自于plaform而不是您的代码时。不要在构造函数中进行任何日志记录。如果您需要,这意味着您在构造函数中已经做得太多了。注入构造函数只需检查null并存储传入的依赖项。任何需要时间的东西都应该从组件的构造函数中移出。阅读更多信息。这不是商业。不幸的是,他们不是“我的”构造函数——他们是平台的一部分。给定控制器的注入参数列表相当长。我只是想弄清楚哪一个(如果有的话)需要花这么长时间来构建。NopCommerce的构造函数不是特别多,所以如果它需要很长时间,那么它一定是您自己的类之一。