由于输出窗口中输出的类型名称,调试速度很慢

本文关键字:输出 调试 类型 速度 于输出 窗口 | 更新日期: 2023-09-27 18:34:29

对于 tl;dr 人群:

  1. 如果代码中的类型名称不是 Console.WriteLine 或 Debug.Print 语句,是什么导致类型名称写入输出窗口?是Visual Studio调试器吗?和
  2. 如何关闭它?

背景和细节:

我正在尝试调试将CSV文件导入数据库的程序。最近,我更改了包含第三方库依赖项的方式。以前,我引用的是下载的二进制文件。现在,如果第三方库有可用的源代码,例如 NHibernate,则该项目将包含在我的解决方案中,将与我自己编写的项目一起编译。

自更改以来,我在"输出/调试"窗口中看到很多仅包含类型名称的单行,这是我以前从未见过的。我的程序是一个数据导入器,主循环导致这些行出现 1000 次,减慢调试速度并污染输出窗口。具体来说,有很多台词是这样说的:

NHibernate.Driver.NHybridDataReader

我已经跟踪了代码,似乎每当 NHibernate 从数据库中读回结果时都会显示此代码。但是,该行不是由 NHibernate 库以代码输出的,因此它必须来自其他地方。我的猜测是Visual Studio Debugger正在将其写入输出窗口,类似于程序集绑定期间发生的情况。

我尝试在发布模式下编译 NHibernate 项目,并在调试模式下编译其他所有项目,但这并没有解决它。我还尝试取消选中NHibernate项目的"启用Visual Studio托管进程",但这也没有用。

总之,我的问题是:

  1. 如果代码中的不是 Console.WriteLine 或 Debug.Print 语句,那么将类型名称写入输出窗口是什么?
  2. 如何关闭它?

我的问题不是什么

我的问题不是关于编写数据导入程序的更好方法,以便从数据库中预加载所需的数据。我知道我写的代码很慢;在这种特殊情况下,在生产中,这是可以的。 我想要的是停止用大量不需要的类型信息污染调试窗口。我的程序的工作循环导致长 CSV 文件的类型写入 1000 次,这使得输出难以使用,并在调试器尝试同步输出窗口时减慢调试器的速度。这就是我试图阻止的。但我不确定该怎么做,因为我甚至不确定消息来自哪里。

由于输出窗口中输出的类型名称,调试速度很慢

在看不到代码的情况下很难提出建议,但是我要做的是安装RedGate的Reflector的试用版并使用它来将断点添加到Debug.*和Console.*函数中。 如果命中其中一个断点,则可以回溯调用堆栈,以查找实际将行添加到输出的内容。 如果这些方法都没有导致添加行,则可以将断点添加到 DefaultTraceListener 和 TextWriter。

我还没有遇到任何其他可以在运行时将消息添加到 Visual Studio 输出窗口的东西。

我认为

这无关紧要,尽管它解决了我不久前看似无关的问题(我的自动测试随机失败并打印到控制台(。我不得不取消选中 Visual Studio 在"选项"中的"调试"菜单下的"启用属性评估和其他隐式函数调用"。对不起,如果这是题外话/没有帮助!

编辑:另外,您是否尝试过更改"调试"部分中的"输出窗口"设置?您可以关闭所有调试输出并将您自己的调试打印到文件中。