根据MSDN,MethodRental Class允许更改动态模块的方法主体。但是,由于其局限性,我无法考虑其实际用途。谷歌也没有帮助我。
有什么想法可以用于该类吗?
最佳答案
与ICorProfilerCallback::JITCompilationStarted
配对时,这在本质上与ICorProfilerInfo::SetILFunctionBody
相似,但有更多限制。 ICorProfiler*
类可用于对几乎所有托管方法进行运行时检测。有些分析器和调试器使用它们来收集有关正在运行的进程的信息。
您可以使用MethodRental
检测代码以用于诊断。一些例子:
函数enter / exit将为您提供执行跟踪,您可以使用该跟踪来从中导出分析数据。
检测同步原语可以帮助您诊断竞争状况。
检测基本块可以帮助您确定代码覆盖率。
您也可以使用MethodRental
增强现有代码的功能。我想到了Aspect-oriented programming。您可以将安全性,日志记录或其他跨领域设计问题“编织”到现有代码中。但是,这将需要其他工具(XML,C#库)来表达您的方面。
最后,您可以使用MethodRental
“绕过”现有代码,即使用拦截方法调用来创建一种运行时多态性。例如,如果您的客户端代码使用一些动态生成的类RegistryStore
通过GetConfig
获取某些配置,则可以重写该方法的IL,以更改RegistryStore.GetConfig
的实现以改为使用文件系统。您无需更改客户端代码即可执行此操作。