2012-12-13 8 views
5

TraceSourceのクラスのMSDNドキュメントは、app.configファイルがTraceSourceのインスタンスの情報を一覧表示することができます方法の例があります。.NETプログラムではTraceSourceの名前はどのように解決されますか?

http://msdn.microsoft.com/en-us/library/system.diagnostics.tracesource.aspx

しかし、TraceSourceの値が格納されている場所についての情報はありません。 ..既存のTraceSourceオブジェクトはどこに保存されていますか?彼らはいつですか(編集:構成されたインスタンスを意味します)? TraceSourceオブジェクトの作成時に、新しいインスタンスではなく、名前付きインスタンスを返す方法を知っています(編集:インスタンスを設定する必要があります)。 Reflectionを使わずに既存のTraceSourceオブジェクトのリストを見つけることはできますか?

+0

マイナーポイント:TraceSourceは.NETの一部であるため、これはどの.NETプログラムにも当てはまります。 –

+0

確かに、それらは.NETの機能であり、C#のものではありません。 – Matt

答えて

0

これはすべての質問に対処するかどうかわかりません - 私はTraceSourceクラスについて十分な知識はありませんが、これはあなたがリンクしているMSDNよりも優れた情報ページと思われます。

TraceSource

それが役に立てば幸い!

+0

このリンクはトレースソースを使用する方法についてですが、私はOPがTraceSource内部の仕組みを尋ねていると思います。 – MatthewMartin

+0

具体的には、MSDNページの 'TraceSource t = new TraceSource(" TraceTest ")のコードが、app.configファイル内で名前がTraceTestでシリアル化されたTraceSourceに解決され、 TraceSourcesという名前です。リンクされたページは、MySQLのこの情報のみを指定し、MSDNページの上には何も情報を提供しません。 – Matt

2

TraceSourceクラスは、ソースのプライベートリストを保持します。しかし、TraceSourceクラス以外の誰にもアクセスできません。

.configファイルセクションは、リスナーをトレースソースとして構成するためのものです。したがって、コードでTraceSourceを作成すると、コンストラクタで渡した名前が使用され、.configファイルを調べて自動的に追加または削除されるリスナーを確認します。

コードはソースを作成し、.configファイルはそれを設定します。逆に、.configファイルはソースを作成できません。

+0

これについて説明しているドキュメントにリンクしていますか? M $が、既存のTraceSourceまたは設定されたTraceSourcesの名前をクラス内に非公開にする理由を知っていますか? IMHOは、設計上の問題のように思われます。コード内の場所が、既存のインスタンスまたはapp.configファイルに設定されているインスタンスと同じ名前のTraceSourceインスタンスを作成すると、トレースが重複します。名前が存在するかどうかを照会しないのはなぜですか? – Matt

+0

@Mattトレースには多くの使用シナリオがあり、この場合の設計者は自分のコードを記述してトレースしていた開発者を対象としたトレースを念頭に置いていました。サーバー管理者やサードパーティ製のライブラリのユーザーがトレースを表示する場合がありますが、Systems.DiagnosticsにはTraceSourcesの検出などの機能がありません。一方、よく知られているAPIなので、リスナーを配線すると、再コンパイルやソースコードへのアクセスが不要になります。 – MatthewMartin

+0

重複はありません。ここでも、名前はソースではなくリスナーを選択するためにのみ使用されます。同じ名前の複数のTraceSourceを持つことは非常に妥当です。複数のクラスで出力を生成するプライベートトレースソースを作成することができます。これは、おそらく正確にこの機能が必要な理由です。 –

0

TraceSourceオブジェクトが格納されていますか?

静的コレクション(アプリドメインごとに1つのコピー)では、.NETバージョンでは、あまりにも多くのものが作成されるとメモリリークを引き起こす可能性のある弱参照で格納されます。私が正しく覚えていれば、モノバージョンはこの問題がありません。

詳細については、ソースを読むことをお勧めします.Onoソースは正式に公開されているため追跡が簡単です。

いつそれらが構築されますか?

トレースを書き込んでいるアプリケーションが、TraceSource source = new TraceSource();

TraceSourceオブジェクトの作成時に、新しいインスタンスではなく名前付きインスタンスを返す方法をTraceSourceオブジェクトがどのように知っていますか?

わかりません。

Reflectionを使用せずに既存のTraceSourceオブジェクトのリストを見つけることはできますか?

RedGate Reflectorでこれを行うために使用しました。 System.NetとWCFライブラリはSystems.Diagnosticsを使用していますが、他にはほとんどありません。APIには、現在のトレースソースのランタイムを単にインタージェクトする方法はありません。これは素晴らしい機能でした。

+0

上記の詳細を記述した正式なM $のドキュメントへのリンクがありますか?それとも、ソースコードの無作為なコピーで起こったのですか? :) – Matt

+0

ここに1つのコピーがあります:http://reflector.webtropy.com/default.aspx/Dotnetfx_Vista_SP2/Dotnetfx_Vista_SP2/[email protected]@[email protected]/DEVDIV/depot/DevDiv/releases/whidbey/NetFxQFE/ndp/fx/ src/CompMod/System/Diagnostics/TraceSource @ cs/1/TraceSource @ csそして、これを法的に見る方法もあります:http://www.hanselman.com/blog/NETFrameworkLibrarySourceCodeAvailableForViewing.aspx – MatthewMartin

関連する問題