在 Web 应用程序中进行调试时需要阻止 Application Insights 初始化

Need to prevent Application Insights from initializing when in debug in a web app

我有一个 MVC 网络应用程序。它在 Application_Start() 期间有条件地初始化数据库中的测试数据,而在调试配置中 运行。显然,由于一位开发人员向项目添加了应用程序洞察力跟踪,此初始化速度非常慢。你看,每次我们通过 entity framework 保存到数据库时,我们现在在调用堆栈上点击以下内容:

System.Web.dll!System.Web.HttpContext.Request.get()
Microsoft.AI.Web.dll!Microsoft.ApplicationInsights.Web.Implementation.HttpContextExtensions.GetRequest(System.Web.HttpContext context)
Microsoft.AI.Web.dll!Microsoft.ApplicationInsights.Web.Implementation.WebTelemetryInitializerBase.Initialize(Microsoft.ApplicationInsights.Channel.ITelemetry telemetry)
Microsoft.ApplicationInsights.dll!Microsoft.ApplicationInsights.TelemetryClient.Initialize(Microsoft.ApplicationInsights.Channel.ITelemetry telemetry)

HttpContext.Request.Get()!!!别开玩笑,这会很慢。我们在数据填充期间进行了大量保存。当然,这里有一些优化,但这是一个毛茸茸的乱七八糟的东西,我没有写,宁愿避免破解。

基本上,我希望 Application Insights 停止执行任何 Web 请求。最好,它在调试时什么都不做,但只要它表现良好,我不介意。我试过设置:

TelemetryConfiguration.Active.DisableTelemetry = true;

但这显然不会影响调用 TelemetryClient.Initialize() 的任何代码路径。有什么指点吗?

据我所知,从 运行 停止 AI 的最佳方法是使用 web.config transform 作为调试配置以将其删除。这将确保它不会注册任何网络请求。

Web.Debug.config

的内容
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.web>
      <httpModules>
        <add xdt:Transform="Remove" xdt:Locator="Match(name)" name="ApplicationInsightsWebTracking" />
      </httpModules>
  </system.web>
  <system.webServer>
    <modules>
      <add xdt:Transform="Remove" xdt:Locator="Match(name)" name="ApplicationInsightsWebTracking"  />
    </modules>
  </system.webServer>
</configuration>

我发现附加调试器后 Application Insights 内部代码运行缓慢。

这是由于在 HttpContext.Request 周围引发了很多异常(然后进行了处理,因此除了速度慢之外没有引起任何其他问题)。

这些都对我有帮助:

  • 尽早在某个地方调用它:TelemetryConfiguration.Active.DisableTelemetry = true;
  • 工具 -> 选项... -> 调试 -> 常规 -> 选中“仅启用我的代码”