如何在 .NET 探查器中获取唯一的方法 ID (ICorProfilerCallback)



我玩了.NET分析API(ICorProfilerCallback),很快就发现FunctionID并不稳定(它可以重用,见 http://msdn.microsoft.com/en-us/library/bb384619.aspx)。没事。我想出了使用模块版本ID(MVID)和方法令牌(mdTokenDef)对方法进行编码的想法。

但是,我担心这是空间无效的(GUID 为 16 字节 + 令牌为 4 字节)。现在我考虑使用某种哈希(我认为 32 位哈希应该足够了)。

您怎么看,有没有更好的方法来编码方法?

很难

弄错,在应用程序域被拆除之前,函数ID是稳定的。 FunctionUnloadStarted 回调是从符号表中清除 id 的最直接方法。

小心泛型。 例如,当Foo和Bar是引用类型时,List<Foo>List<Bar>的方法共享相同的函数id。 这是工作中的代码重用,是 .NET 泛型的一项功能。

相关内容

  • 没有找到相关文章