当前位置:天才代写 > tutorial > C语言/C++ 教程 > C#/C++/CLI运行效率测试之二 Native C++挪用Native C++ DLL

C#/C++/CLI运行效率测试之二 Native C++挪用Native C++ DLL

2017-11-02 08:00 星期四 所属: C语言/C++ 教程 浏览:66

副标题#e#

本文分为两方面

一.Native C++挪用Native C++ DLL 并测试运行时间

二. 完全由C# 实现运算代码 并测试运行时间

具体进程:

一:

至于如何获取EfficiencyNativeCPPDLL.dll 和 EfficiencyNativeCPPDLL.lib 以及生成项目EfficiencyNativeCPPDLL

本文报告在VS2010中当地C++挪用C++类库以举办效率测试

1. 常见Win32节制台应用措施 ConsoleCPPInvokeDLL

C#/C++/CLI运行效率测试之二 Native C++调用Native C++ DLL

2.选择下一步点击完成绩可以了

3 对EfficiencyNativeCPPDLL.lib的挪用

在项目ConsoleCPPInvokeDLL中的资源文件上\右击添加现有项可选择 EfficiencyNativeCPPDLL.lib

C#/C++/CLI运行效率测试之二 Native C++调用Native C++ DLL


#p#副标题#e#

二: 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;     
        }     
    }     
         
             
}

using System;     
using System.Collections.Generic;     
using System.Linq;     
using System.Text;     
         
namespace ConsoleEfficiencyCS     
{     
    class Program     
    {     
        static void Main(string[] args)     
        {     
            EffCompute provider = new EffCompute();     
            const int NITER = 201;     
         
            provider.InitPositions();     
            provider.UpdatePositions();     
         
            int start = Environment.TickCount;     
            for (int i = 0; i < NITER; i++)     
            {     
                provider.Pot = 0.0;     
         
                //低效模式     
               /* provider.ComputePot();    
                if (i % 10 == 0)    
                    Console.WriteLine("{0}: Potential: \t {1}", i, provider.Pot);    
                 */ 
         
                //高效模式                     
                if (i % 10 == 0)     
                    Console.WriteLine("{0}: Potential: \t {1}", i, provider.ComputePot());     
         
                provider.UpdatePositions();     
         
            }     
            int stop = Environment.TickCount;     
         
            Console.WriteLine("Seconds = {0,10}", (double)(stop - start) / 1000);     
         
            Console.ReadKey();     
        }     
    }     
}

#p#副标题#e#

3 运算功效:

C#/C++/CLI运行效率测试之二 Native C++调用Native C++ DLL

综合以上两篇文章可见 在均是Release环境下别离对

C#挪用CLI/C++转而挪用 Native C++ Dll ;,当地C++挪用 和 CS的.Net实现

可以看出

当地C++挪用效率最高

C#挪用CLI/C++转而挪用 Native C++ Dll的效率其次 可以说跟当地C++挪用差不多

而CS的实现效率约莫相差20倍.

作者:csdn博客 Cheviko

 

    关键字:


天才代写-代写联系方式