C++ C+;中从本机转换为管理未签名短字符的最快方法+/CLI

C++ C+;中从本机转换为管理未签名短字符的最快方法+/CLI,c++,.net,optimization,c++-cli,C++,.net,Optimization,C++ Cli,在C++/CLI中,我有一个函数可以将无符号short的本机代码转换为托管代码,但我的方法需要调用复制两次。有没有其他方法可以加快这个过程 //input unsigned short* m_rawDataPtr; //output array<uns16>^ m_rawData; ... int size = data.GeSize(); array<short>^ dataSigned = gcnew array<short>( size / 2);

在C++/CLI中,我有一个函数可以将无符号short的本机代码转换为托管代码,但我的方法需要调用复制两次。有没有其他方法可以加快这个过程

//input
unsigned short* m_rawDataPtr; 
//output
array<uns16>^ m_rawData;

...
int size = data.GeSize();
array<short>^ dataSigned = gcnew array<short>( size / 2);
m_rawData = gcnew array<unsigned short>((int)size / 2);

Marshal::Copy(IntPtr((void*)(m_rawDataPtr),dataSigned, 0, dataSigned->Length);
System::Buffer::BlockCopy(dataSigned, 0, m_rawData, 0, (Int32)(size));
//输入
无符号短*m_rawDataPtr;
//输出
数组^m_rawData;
...
int size=data.GeSize();
数组^dataSigned=gcnew数组(大小/2);
m_rawData=gcnew数组((int)size/2);
Marshal::Copy(IntPtr((void*)(m_rawDataPtr),dataSigned,0,dataSigned->Length);
System::Buffer::BlockCopy(dataSigned,0,m_rawData,0,(Int32)(大小));

谢谢,

您可以尝试以下方式:

//input
unsigned short* m_rawDataPtr; 
//output
array<unsigned short>^ m_rawData;

cli::pin_ptr<unsigned short> pinnedManaged = &m_rawData[0];
std::memcpy(pinnedManaged , m_rawDataPtr, arrayLength * sizeof(unsigned short));
//输入
无符号短*m_rawDataPtr;
//输出
数组^m_rawData;
cli::pin_ptr pinnedManaged=&m_rawData[0];
std::memcpy(pinnedManaged,m_rawDataPtr,arraylelength*sizeof(unsigned short));

如果GC未使用pin_ptr和memcpy,是否由GC解除分配?