我一直在查看CLR Profiling API的一些文章,其中许多文章都讨论了调用SetILFunctionBody()来进行实际的IL重写;但是,这些文章中没有一个实际上解释了您可以用来重写实际方法IL字节的确切内容。是否有一个非托管的库允许我写IL,或者我必须自己写一个?
答案 0 :(得分:3)
可能。这取决于。
Mono Project有一个名为Cecil的库,你可以在这里访问:
然而,它是托管代码,在分析时无法调用。你可能有几个选择:
#1引入了一堆额外的复杂性。您的探查器最终会有比实际需要更多的移动部件。此外,IPC引入了一堆额外的开销。
#2需要很长时间。鉴于Cecil仍然只有0.6版本,可能不值得花时间去编写自己的实现。
#3会给你最大程度的控制,并且可能是最高效的。然而,它需要比#1更多的努力。
答案 1 :(得分:2)
我为OpenCover https://github.com/sawilde/opencover写了一个简单的文件,您或其他任何人可能会发现这个问题很有用
答案 2 :(得分:1)
这篇文章可能有您想要的内容 http://www.codeproject.com/KB/cs/IL_Rewriting.aspx
答案 3 :(得分:0)
实际的字节必须来自某个地方,如果您只是使用Profiling API,那么您必须自己提供。本文深入探讨了如何做到这一点(可能是你读过的那篇之一):http://msdn.microsoft.com/en-us/magazine/cc188743.aspx
更“常见”的技术是以您喜欢的任何语言实际编写您需要的任何代码,然后将其编译为IL。然后,您可以在设计时提取OpCodes并将它们存储在可以访问它们的位置,或者在运行时从已编译的IL中提取它们并将其填充到您需要的位置。
AFAIK没有非托管库可以帮助您解决此问题。
答案 4 :(得分:-1)
我认为你想要这样做,因为你想看看花时间,以便你可以让它变得更快(而不是只是得到各种时间信息)。 恕我直言,如果您可以在IDE下运行您的应用程序并随机暂停,则不需要分析API。 Here's why.