我在我的asp.net Web API项目中使用迷你探查器,并希望跟踪在自定义DelegatingHandler中运行的某些代码的性能。
MiniProfiler.Current.Step()
内的来电DelegatingHandler
不会显示在结果中。同一项目中的其他调用显示确定。
进一步调查显示,MiniProfiler.Current
中的HttpContext.Current
检索到WebRequestProfilerProvider
。从HttpContext.Current
调用时DelegatingHandler
为空。
有没有更好的方法来检索MiniProfiler.Current以便它在处理程序中运行?
答案 0 :(得分:3)
MiniProfiler时间默认存储在HttpContext.Current
中(如您所见)。因此,如果从HttpContxt.Current
为空的地方调用MiniProfiler,则无法保存结果。解决方案是从其他地方保存(并检索)结果。
MiniProfiler提供了选项,可以选择更改应存储和检索所有结果的位置(使用MiniProfiler.Settings.Storage
)。 new v3 MiniProfiler(beta nuget here)提供了为每个请求配置不同IStorage
的选项,以及使用MultiStorageProvider
指定可以存储和检索结果的多个位置的选项。您可以在github上的Sample.Mvc项目中看到这样的示例。
在您的情况下,最佳方法可能是为您的全局MultiStorageProvider
设置MiniProfiler.Settings.Storage
,该HttpRuntimeCacheStorage
将首先从IStorage
保存/检索,然后再使用其他DelegatingHandler
可以从DelegatingHandler
访问。然后在MiniProfiler.Current.Storage
中,将MultiStorageProvider
设置为仅使用您在DelegatingHandler
中设置的第二个存储选项(因为尝试保存HttpCache是没有意义的)。在这种情况下,MultiStorageProvider
中的个人资料将保存到您的第二个存储空间中,并将与其他结果一起检索以供查看(因为{{1}} Load
会从第一位开始可以得到它们 - 如果它在HttpCache中找不到结果,它将转到第二个选项。
注意 - 在这种情况下,有多个存储选项很有用,但它会对检索配置文件的性能产生负面影响。