我使用.NET分析API(ICorProfilerCallback)并很快发现FunctionID不稳定(可以重复使用,请参阅http://msdn.microsoft.com/en-us/library/bb384619.aspx)。那一切都很好。我想出了使用模块版本ID(MVID)和方法标记(mdTokenDef)编码方法的想法。
但是,我担心这是空间无效的(GUID为16个字节,令牌为4个字节)。现在我考虑使用某种散列(我认为32位散列应该足够了。)
您如何看待,有更好的方法来编码方法吗?
答案 0 :(得分:1)
很难弄错,在appdomain被拆除之前,FunctionID是稳定的。 FunctionUnloadStarted回调是从符号表中清除id的最直接方法。
请注意泛型。当Foo和Bar是引用类型时,List<Foo>
和List<Bar>
的方法共享相同的函数id。这是代码在工作中的重用,这是.NET泛型的一个特性。