程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C#/C++/CLI運行效率測試之二 Native C++調用Native C++ DLL

C#/C++/CLI運行效率測試之二 Native C++調用Native C++ DLL

編輯:關於C++

本文分為兩方面

一.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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved