1

.NET プロファイリング API (ICorProfilerCallback) を試してみたところ、FunctionID が安定していないことがすぐにわかりました (再利用される可能性があります。 http://msdn.microsoft.com/en-us/library/bb384619.aspxを参照してください)。それは大丈夫です。モジュール バージョン ID (MVID) とメソッド トークン (mdTokenDef) を使用してメソッドをエンコードするというアイデアを思いつきました。

ただし、これはスペースが無効であることが懸念されます (GUID の 16 バイト + トークンの 4 バイト)。現在、ある種のハッシュを使用することを検討しています(32ビットハッシュで十分だと思います)。

メソッドをエンコードするより良い方法はありますか?

4

1 に答える 1

1

これを誤解するのは難しいです。アプリドメインが取り壊されるまで、FunctionID は安定しています。FunctionUnloadStarted コールバックは、シンボル テーブルから ID を消去する最も直接的な方法です。

ジェネリックに注意してください。Foo と Bar が参照型の場合、say と のメソッドは同じ関数 ID を共有しますList<Foo>List<Bar>これは、職場でのコードの再利用であり、.NET ジェネリックの機能です。

于 2012-05-01T18:35:08.240 に答える