嵌入Mono - 本机 - >托管上下文切换的开销

jam*_*o00 0 c# mono jit

任何人都有关于Mono中本机 - >托管上下文切换的开销的任何细节?即通过使用C API调用.NET方法/创建.NET对象而导致的开销.

lup*_*pus 5

从C代码调用托管方法的当前API具有以下类型的开销:

  • 它执行一些锁定和散列查找操作,以查看您正在调用的方法和合成的辅助方法是否已编译
  • 如果方法尚未编译为本机代码,则会对其进行编译
  • 实际的方法调用很快,并且与某些答案中的推测相反,没有编组开销,因此blittable类型和其他此类注意事项不适用
  • 如果返回类型是valuetype,则该值被装箱:这会导致一些GC开销.请注意,对于返回void或引用类型的方法,没有开销

我们将介绍一个新的API,它可以消除上面第一点和最后一点的开销.与此同时,除非您每秒进行数百万次调用,否则这些开销非常小,并且几乎总是被称为执行实际工作的实际托管方法相形见绌.