RT,有一个函数会被极高频率的调用,而且是一个极小函数(一个简单的数学变换)
有没有什么方法可以提高这个函数的执行效率。
就像C++的inline函数和C的宏定义函数一样。

解决方案 »

  1.   

    引入内联函数的目的是为了解决程序中函数调用的效率问题。  函数是一种更高级的抽象。它的引入使得编程者只关心函数的功能和使用方法,而不必关心函数功能的具体实现;函数的引入可以减少程序的目标代码,实现程序代码和数据的共享。但是,函数调用也会带来降低效率的问题,因为调用函数实际上将程序执行顺序转移到函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。特别是对于一些函数体代码不是很大,但又频繁地被调用的函数来讲,解决其效率问题更为重要。引入内联函数实际上就是为了解决这一问题。
    但是在C#中好像没有内联函数的概念。但你可以通过 unsafe 关键词,引入C++甚至汇编来提高效率。
    参见 http://www.codeproject.com/KB/cs/inline_asm_for_c_.aspx
      

  2.   

    .NET Framework 的 JIT 编译器会自动将短小的方法做内联处理,最典型的是那些 get/set 访问器。程序员不必关注。
      

  3.   

    刚差了点资料,谈谈我的理解1.编译器应该比你更知道什么时候使用内联
    如果我们使用内联不当就会产生很多垃圾的二进制代码,所以C#里的内联是编译器决定的2.并不是从C#代码到IL代码中进行内联,而是JIT在将IL变为Binary时进行内联
    (JIT的编译并不是一次完成,而是以函数为单位编译,如果有的函数在执行过程中从未被调用,他就不会被编译)
    如果有一个小函数A被函数B调用,就有可能发生内联
    这个内联是指,B函数不再去调用A函数,JIT会将A函数的二进制代码直接嵌入到B函数内部所以用C#写很多小函数要比写一个大函数好。