项目用到了一些opencv的函数,所以使用非托管C++做的算法,再使用托管C++封装,x86下运行正常。用64位的opencv库,将程序移植到x64下后,性能分析clr.dll独占样本居然达到了70%。而且显示调用clr.dll的函数都是托管C++封装函数。而且C#下实例化大数组的时候,也大量调用了clr.dll。但在x86下时,相同的程序,clr.dll一共才百分之零点几。这是为什么那?x64下配置需要注意什么那?
解决方案 »
- 解惑,关于数据类型,在线等...
- 如何可以将 c:\images\下的10个bmp图标文件图案(均是38*38像素)合成一个bmp图片文件(380*38像素)保存?
- 请高手出手相救
- c#中可不可以调用PB生成的DLL中的方法,要怎么调用啊?
- 怎样设置跟踪。。。。。。。。。。。。。。。。
- 急急急,一个关系treeview简单问题。
- UTF-8编码的的文本文件,我想在其中的某个位置写入字符,该怎样做?
- C# Winfrom 关于 WinRAR 创建自解压格式压缩包问题
- vs2010在xp中开发的c#程序 在win7中运行不稳定???
- 想用c#做一个flash播放器,该怎么实现呢?
- C#文件替换
- 如何在从树形结构中传参链接到另一个页面
//托管C++函数
int Cal_ManagedFun(array <unsigned char>^src,array <unsigned char>^dst)
{
//新建一个托管指针并开辟空间
IntPtr srcPtr = Marshal::AllocHGlobal(Marshal::SizeOf(src[0])*src.Length);
IntPtr dstPtr = Marshal::AllocHGlobal(Marshal::SizeOf(dst[0])*dst.Length); //托管数组拷贝至托管指针
Marshal::Copy( src, 0, srcPtr, src.Length );
//托管指针转非托管指针,并写入算法参数
int b = m_Impl->Cal_UnmanagedFun((unsigned char *)srcPtr.ToPointer(),(unsigned char *)dstPtr.ToPointer()); //托管指针拷贝至托管数组
Marshal::Copy(dstPtr, dst, 0, dst.Length); //释放指针
Marshal::FreeHGlobal(srcPtr);
return b;
}