作者don323 (咚薯叔)
看板C_Sharp
标题[问题] 请问要如何从C++传大量资料给C#处理?
时间Wed Feb 4 16:44:35 2026
最近要试试看是否能将公司程式若干 dll 组件
从原本的 C++ 改成 C# 看看?
遇到一个问题,就是要如何比较有效率的
从 C++ 丢一大块资料给 C# 处理?
目前的解法是使用 gcnew,复制一大块传过去
做完再传回来。这样就要多 copy 两次。有没有机会
直接把 buffer pointer 直接传进去,省下这两次 copy?
目前的 code 大致如下。这是实际可跑的 code 简化示意如下
希望大家给个指导。谢谢
//
// in code.cpp
//
short * pData = ... // From some where
int iSize = 1000000;
cli::array<short>^ mdata = gcnew cli::array<short>(iSize);
int i; for (i = 0; i < iSize; i++) mdata[i] = pData[i]; // Copy data ...
pCSObject->CSFunc_Modify(mdata, iSize);
for (i = 0; i < iSize; i++) pData[i] = mdata[i]; // Copy data ...
//
// in code.cs
//
public void CSFunc_Modify(short[] mdata, int iSize)
{
for (i = 0; i < iSize; i ++)
{
mdata[i] = mdata[i] * 2;
}
}
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.137.21.207 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_Sharp/M.1770194679.A.4F8.html
1F:推 cancelpc: 记忆体映射档(虚拟记忆体) 02/04 17:47
2F:→ cancelpc: 直接可以用指标玩 02/04 17:48
3F:推 cancelpc: 预防有人把虚拟记忆体关掉,程式最好先检查。提醒,会关 02/04 18:33
4F:→ cancelpc: 的应该也会开。 02/04 18:33
5F:→ cancelpc: 这是系统层级的标准API 02/04 18:34
6F:→ don323: 请问一楼。有相关网页介绍可以参考吗? 02/04 18:49