1

tl; dr群集の場合:

  1. コード内のConsole.WriteLineまたはDebug.Printステートメントでない場合、タイプ名が出力ウィンドウに書き込まれる原因は何ですか?Visual Studioデバッガーですか?と
  2. どうすればオフにできますか?

背景と詳細:

CSVファイルをデータベースにインポートするプログラムをデバッグしようとしています。最近、サードパーティのライブラリの依存関係を含める方法を変更しました。以前は、ダウンロードしたバイナリファイルを参照していました。現在、サードパーティのライブラリにNHibernateなどの利用可能なソースコードがある場合、プロジェクトはソリューションに含まれ、自分で作成したプロジェクトと一緒にコンパイルされます。

変更後、以前は表示していなかったタイプ名のみを含む単一行が[出力/デバッグ]ウィンドウに多数表示されます。私のプログラムはデータインポーターであり、メインループにより、これらの行が数千回表示され、デバッグが遅くなり、出力ウィンドウが汚染されます。具体的には、これを言う行がたくさんあります:

NHibernate.Driver.NHybridDataReader

コードをトレースしましたが、NHibernateがデータベースから結果を読み戻すたびにこれが表示されるようです。ただし、この行はNHibernateライブラリによってコードで出力されないため、別の場所から取得されている必要があります。私の推測では、Visual Studioデバッガーは、アセンブリバインディング中に発生するのと同様に、出力ウィンドウに書き込みます。

NHibernateプロジェクトをリリースモードでコンパイルし、他のすべてをデバッグモードでコンパイルしようとしましたが、修正されませんでした。NHibernateプロジェクトだけで[VisualStudioホスティングプロセスを有効にする]のチェックを外してみましたが、それも機能しませんでした。

要約すると、私の質問は次のとおりです。

  1. コード内のConsole.WriteLineまたはDebug.Printステートメントでない場合、出力ウィンドウにタイプ名を書き込むのは何ですか?と
  2. どうすればオフにできますか?

私の質問は何ではありません

私の質問は、必要なデータがデータベースからプリロードされるようにデータインポータープログラムを作成するためのより良い方法についてではありません。私が書いたコードは遅いことを知っています。この特定のケースでは、本番環境では問題ありません。私が欲しいのは、大量の不要なタイプ情報でデバッグウィンドウを汚染するのをやめることです。私のプログラムのワークループにより、長いCSVファイルに対してタイプが数千回書き込まれるため、出力が使いにくくなり、出力ウィンドウを同期しようとするデバッガーの速度が低下します。これは私が防ごうとしていることです。しかし、メッセージがどこから来ているのかさえわからないので、それを行う方法がわかりません。

4

2 に答える 2

3

コードを確認せずに提案を行うことは困難ですが、デバッグするには、RedGateのReflectorの試用版をインストールし、それを使用してDebug。*およびConsole。*関数にブレークポイントを追加します。ブレークポイントの1つにヒットした場合は、呼び出しスタックをさかのぼってトレースし、出力に実際に行を追加しているものを見つけることができます。これらのメソッドのいずれも行の追加を引き起こしていない場合は、DefaultTraceListenerとTextWriterにブレークポイントを追加する可能性があります。

実行時にVisualStudioの出力ウィンドウにメッセージを追加できるものは他にありません。

于 2012-05-17T00:23:11.583 に答える
1

しばらく前に、一見無関係に見える問題を解決しましたが、これは無関係だと思います(自動テストがランダムに失敗し、コンソールに出力されました)。[オプション]の[デバッグ]メニューで、VisualStudioの[プロパティ評価とその他の暗黙的な関数呼び出しを有効にする]のチェックを外す必要がありました。これがトピックから外れている/役に立たない場合は申し訳ありません!

編集:また、デバッグセクションの「出力ウィンドウ」設定を変更してみましたか?すべてのデバッグ出力をオフにして、独自のデバッグをファイルに出力することもできます。

于 2012-05-17T00:43:52.307 に答える