根据MSDN,MethodRental Class允许更改动态模块的方法主体。但是,由于其局限性,我无法考虑其实际用途。谷歌也没有帮助我。

有什么想法可以用于该类吗?

最佳答案

ICorProfilerCallback::JITCompilationStarted配对时,这在本质上与ICorProfilerInfo::SetILFunctionBody相似,但有更多限制。 ICorProfiler*类可用于对几乎所有托管方法进行运行时检测。有些分析器和调试器使用它们来收集有关正在运行的进程的信息。

您可以使用MethodRental检测代码以用于诊断。一些例子:


函数enter / exit将为您提供执行跟踪,您可以使用该跟踪来从中导出分析数据。
检测同步原语可以帮助您诊断竞争状况。
检测基本块可以帮助您确定代码覆盖率。


您也可以使用MethodRental增强现有代码的功能。我想到了Aspect-oriented programming。您可以将安全性,日志记录或其他跨领域设计问题“编织”到现有代码中。但是,这将需要其他工具(XML,C#库)来表达您的方面。

最后,您可以使用MethodRental“绕过”现有代码,即使用拦截方法调用来创建一种运行时多态性。例如,如果您的客户端代码使用一些动态生成的类RegistryStore通过GetConfig获取某些配置,则可以重写该方法的IL,以更改RegistryStore.GetConfig的实现以改为使用文件系统。您无需更改客户端代码即可执行此操作。

07-26 02:12