本文分為兩方面
一.Native C++調用Native C++ DLL 並測試運行時間
二. 完全由C# 實現運算代碼 並測試運行時間
詳細過程:
一:
至於如何獲取EfficiencyNativeCPPDLL.dll 和 EfficiencyNativeCPPDLL.lib 以及生成項目EfficiencyNativeCPPDLL
本文講述在VS2010中本地C++調用C++類庫以進行效率測試
1. 常見Win32控制台應用程序 ConsoleCPPInvokeDLL

2.選擇下一步點擊完成就可以了
3 對EfficiencyNativeCPPDLL.lib的調用
在項目ConsoleCPPInvokeDLL中的資源文件上\右擊添加現有項可選擇 EfficiencyNativeCPPDLL.lib

4 書寫測試主體文件
CPPInvokeDLL.cpp
#include "stdafx.h"
#include "EfficiencyNativeCppDll.h"
#include <time.h>
#define NITER 201
int _tmain(int argc, _TCHAR* argv[])
{
int i;
clock_t start, stop;
EfficiencyNativeCppDll* effPro = new EfficiencyNativeCppDll();
effPro->InitPositions();
effPro->UpdatePositions();
start=clock();
for( i=0; i<NITER; i++ ) {
effPro->Pot = 0.0;
/*
//低效率模式
effPro->ComputePot();
if (i%10 == 0) printf("%5d: Potential: %10.3f\n", i, effPro->Pot);
*/
//高效率模式 ??不曉得為什麼這樣的速度會快那麼多 快了近20倍
if (i%10 == 0) printf("%5d: Potential: %10.3f\n", i, effPro->ComputePot());
effPro->UpdatePositions();
}
stop=clock();
printf ("Seconds = %10.9f\n",(double)(stop-start)/ CLOCKS_PER_SEC);
delete effPro;
getchar();
}
測試結果:

二: C#代碼實現及測試結果:
EffCompute.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleEfficiencyCS
{
public class EffCompute
{
public double Pot{get;set;}
private int DIMS = 3;
private int NPARTS = 1000;
private double[,] _r ;
private Random _rand;
public EffCompute()
{
_r = new double[DIMS, NPARTS];
_rand = new Random();
}
public void InitPositions()
{
for(int i = 0; i < DIMS; i++)
{
for (int j = 0; j < NPARTS; j++)
{
_r[i, j] = 0.5 + _rand.NextDouble();
}
}
}
public void UpdatePositions()
{
for (int i = 0; i < DIMS; i++)
{
for (int j = 0; j < NPARTS; j++)
{
_r[i, j] -= 0.5 + _rand.NextDouble();
}
}
}
public double ComputePot()
{
double distx, disty, distz, dist;
double pot;
distx = 0;
disty = 0;
distz = 0;
pot = 0;
for (int i = 0; i < NPARTS; i++)
{
for (int j = 0; j < i - 1; j++)
{
distx = Math.Pow((_r[0, j] - _r[0, i]), 2);
disty = Math.Pow((_r[1, j] - _r[1, i]), 2);
distz = Math.Pow((_r[2, j] - _r[2, i]), 2);
dist = Math.Sqrt(distx + disty + distz);
pot += 1.0 / dist;
}
}
this.Pot = pot;
return pot;
}
}
}
3 運算結果:

綜合以上兩篇文章可見 在均是Release情況下分別對
C#調用CLI/C++轉而調用 Native C++ Dll ;,本地C++調用 和 CS的.Net實現
可以看出
本地C++調用效率最高
C#調用CLI/C++轉而調用 Native C++ Dll的效率其次 可以說跟本地C++調用差不多
而CS的實現效率大約相差20倍.
作者:csdn博客 Cheviko