小编mav*_*ix3的帖子

C++/CLI中的#pragma托管(推送,关闭)会影响性能吗?

我正在为C#编写一个DLL作为高性能模块,因此我使用C++/CLI,因为它很容易在C#中引用并支持本机代码.我在msdn上发现使用#pragma managed(push,off)和#pragma managed(pop)可以使代码编译为本机代码.但根据我的简单测试,结果表明相反.

这是使用Visual Studio 2012使用/ clr编译的代码.

int clrloop()
{
  for (int i = 0; i < 999999999; i++)
  {
      double test=9.999;
      test=pow(test, 10);
  }
  return 0;
}

#pragma managed(push,off)
int loop()
{
  for (int i = 0; i < 999999999; i++)
  {
      double test=9.999;
      test=pow(test, 10);
  }
  return 0;
}
#pragma managed(pop)

int main(array<System::String ^> ^args)
{
    int a=loop();
    int b=clrloop();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

性能分析表明,unmanaged loop()的成本是clrloop()的两倍.但是如果我把loop()放到不同的.cpp文件中并将这个单个文件设置为wihouth/clr,并且没有使用#pragma managed(push,off)的东西,结果就像预期的那样好.

那么,这个#pragma的问题是什么?

interop c++-cli

3
推荐指数
1
解决办法
1364
查看次数

标签 统计

c++-cli ×1

interop ×1