測試架構
- Native C++ EXE 呼叫 Native C++ DLL:VS2010 Win32 主控台專案,連結
EfficiencyNativeCPPDLL.lib,呼叫 ComputePot 迴圈 201 次。
- 純 C# 實作:相同演算法移植至 C#,同樣迴圈 201 次。
關鍵程式碼片段
// C++ DLL 呼叫端
EfficiencyNativeCppDll* effPro = new EfficiencyNativeCppDll();
effPro->InitPositions(); effPro->UpdatePositions();
clock_t start = clock();
for (int i=0; i<NITER; ++i) {
effPro->Pot = 0.0;
if (i%10==0) printf("%5d: Potential: %10.3f\n", i, effPro->ComputePot());
effPro->UpdatePositions();
}
clock_t stop = clock();
printf("Seconds = %10.9f\n", (double)(stop-start)/CLOCKS_PER_SEC);
測試結果
- Native C++ 呼叫 DLL:約 0.7 秒(Release 模式)。
- C# 純實作:約 14 秒(Release 模式),效能差距約 20 倍。
- C++/CLI 封裝呼叫 Native DLL:效能接近 Native C++,僅有微小封裝開銷。
結論
- Native C++ 直接呼叫 Native DLL 效能最佳。
- C++/CLI 作為橋接層效能損失極小,適合混合開發。
- 純 C# 密集數值運算效能明顯落後,建議核心演算法用 Native C++ 實作並透過 P/Invoke 或 C++/CLI 呼叫。