作者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://www.ptt.cc/bbs/C_Sharp/M.1770194679.A.4F8.html
推 cancelpc: 記憶體映射檔(虛擬記憶體) 02/04 17:47
→ cancelpc: 直接可以用指標玩 02/04 17:48
推 cancelpc: 預防有人把虛擬記憶體關掉,程式最好先檢查。提醒,會關 02/04 18:33
→ cancelpc: 的應該也會開。 02/04 18:33
→ cancelpc: 這是系統層級的標準API 02/04 18:34
→ don323: 請問一樓。有相關網頁介紹可以參考嗎? 02/04 18:49