12

我在我的 asp.net Web API 项目中使用迷你分析器,并希望跟踪在自定义 DelegatingHandler 中运行的一些代码的性能。

MiniProfiler.Current.Step()内部的调用DelegatingHandler不会显示在结果中。同一项目中的其他调用显示正常。

进一步调查显示,是MiniProfiler.CurrentHttpContext.Current. WebRequestProfilerProvider并且HttpContext.Current从 调用时为空 DelegatingHandler

有没有更好的方法来检索 MiniProfiler.Current 以便它在处理程序中工作?

4

1 回答 1

4

MiniProfiler TimingsHttpContext.Current默认存储在其中(如您所见)。因此,如果您从为 null 的地方调用 MiniProfiler,HttpContxt.Current则无法保存结果。解决方案是从其他地方保存(和检索)结果。

MiniProfiler 提供了更改所有结果的存储和检索位置的选项(使用MiniProfiler.Settings.Storage)。新的v3 MiniProfiler (此处为 beta nuget)提供了IStorage为每个请求配置不同的选项,以及使用 aMultiStorageProvider指定可以存储和检索结果的多个位置。您可以在 github 上的Sample.Mvc项目中看到一个示例。

在您的情况下,最好的方法可能是MultiStorageProvider为您的全局设置一个MiniProfiler.Settings.Storage,它将首先保存/检索HttpRuntimeCacheStorage,然后使用其他IStorage可从DelegatingHandler. 然后在 中DelegatingHandler,将 设置MiniProfiler.Current.Storage为仅使用您在 中设置的第二个存储选项MultiStorageProvider(因为尝试保存 HttpCache 毫无意义)。在这种情况下,来自的配置文件DelegatingHandler将保存到您的第二个存储选项中,并将与您的其他结果一起检索以供查看(因为MultiStorageProvider它将Load从第一个地方获得结果 - 如果它在 HttpCache 中找不到结果,它将转到第二个选项。

注意 - 在这种情况下,拥有多个存储选项很有用,但它可能会对检索配置文件的性能产生负面影响。

于 2014-02-15T21:12:29.013 回答