C#/C++/CLI运行效率测试之二: Native C++调用Native C++ DLL
来源:互联网 发布:淘宝能卖什么东西 编辑:程序博客网 时间:2024/06/08 04:22
本文分为两方面
一. Native C++调用Native C++ DLL 并测试运行时间
二. 完全由C# 实现运算代码 并测试运行时间
详细过程:
一:
至于如何获取EfficiencyNativeCPPDLL.dll 和 EfficiencyNativeCPPDLL.lib 以及生成项目EfficiencyNativeCPPDLL请参见前面的文章 C#通过CLR/C++调用Native CPP 类
本文讲述在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 201int _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#代码实现及测试结果:
1.
EffCompute.csusing 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; } } }
2.
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(); } }}
3 运算结果:
综合以上两篇文章可见 在均是Release情况下分别对
C#调用CLI/C++转而调用 Native C++ Dll ;,本地C++调用 和 CS的.Net实现
可以看出
本地C++调用效率最高
C#调用CLI/C++转而调用 Native C++ Dll的效率其次 可以说跟本地C++调用差不多
而CS的实现效率大约相差20倍.
- C#/C++/CLI运行效率测试之二: Native C++调用Native C++ DLL
- C#/C++/CLI运行效率测试之一: C#通过CLR/C++调用Native CPP 类
- native c++/qt中如何调用c#dll
- JavaSe 调用native C/C++ 之 java头文件生成
- java jvmti native 调用C 程序
- Android原生(Native)C开发之二:framebuffer篇
- Android原生(Native)C开发之二 framebuffer篇
- Android native C开发
- Android Native C Log
- android native c development
- Android Native C Log
- Android Native C Log
- Android Native C Log
- c++/cli调用c#
- C++/CLI 调用 C#
- Android原生(Native)C开发之三
- Java Native Interface(Java 调用Delphi、C、C++编写的DLL)
- 在C语言中静态调用Native DLL(Windows平台)
- 献给2012——易水寒的心声
- Android应用程序框架层和系统运行库层日志系统源代码分析
- JAVA数字处理类使用2
- Android日志系统Logcat源代码简要分析
- android的消息Toast,提示对话框,menu,Activity替换数据传递。
- C#/C++/CLI运行效率测试之二: Native C++调用Native C++ DLL
- container_of()宏解析
- Android系统匿名共享内存Ashmem(Anonymous Shared Memory)简要介绍和学习计划
- 今年总结
- 如何利用C#创建和调用DLL (步骤+实例)
- 进程与线程
- JAVA高级:选择JSF不选Struts的十大理由
- Android系统匿名共享内存Ashmem(Anonymous Shared Memory)驱动程序源代码分析
- Android系统匿名共享内存Ashmem(Anonymous Shared Memory)在进程间共享的原理分析