久久一区二区中文字幕_日韩人体视频_国产影视一区_久久爱www.

南京軟件定制開發(fā)

南京傾心軟件歡迎您訪問本站

13605185909

新聞資訊

NEWS CENTER
欄目導(dǎo)航

企業(yè)定制軟件之C#與C++混合編程及性能分析

發(fā)布時(shí)間:Mar 01, 2022         已有 人瀏覽
C#C++混合編程及性能分析
概要:
眾所周知, ?
C#做界??C++開發(fā)效率要?得多, 但在有性能問題的情況下不得不將部分模塊使?C++, 這時(shí)就需要使?C#C++混合
編程。 本?給出了兩種混合編程的?法以及性能對?。
開發(fā)環(huán)境:

ThinkPad T430 i5-3230M 2.6G 8GWin7 64BitVS2013C++開發(fā)設(shè)置) , C++C#都采?x64平臺(tái), 性能驗(yàn)證使?Release版本。
測試純
C++項(xiàng)?性能:
1. 新建空解決?案: ?件|新建|項(xiàng)?|已安裝|模板|其他項(xiàng)?類型|Visual Studio解決?案|空?解決?案
2. 新建PureCpp項(xiàng)?: 右擊解決?案|添加|新建項(xiàng)?|已安裝|Visual C++|Win32控制臺(tái)程序, 按缺省設(shè)置?成項(xiàng)?
3. 在配置管理器中新建x64平臺(tái), 刪除其他平臺(tái)
4. 新建CppFunction, 并添加測試代碼, 完整代碼如下, 程序結(jié)果: Result: 1733793664 Elapsed: 109
// CppFunction.h
#pragma once
class CppFunction
{
p
ublic
:
CppFunction(){}
~CppFunction(){}

int TestFunc(int a, int b);
};

// CppFunction.cpp
#include "stdafx.h"
#include "CppFunction.h"
class CCalc
{
p
ublic
:
CCalc(
int a, int b)
{
m_a = a;
m_b = b;
}
i
nt
Calc()
{

if (m_a % 2 == 0){
return m_a + m_b;
}
if
(m_b % 2 == 0){
return m_a - m_b;
}
r
eturn
m_b - m_a;
}

private:
int m_a;
int m_b;
};

int CppFunction::TestFunc(int a, int b)
{
CCalc calc(a, b);

return calc.Calc();
}
/
/ PureCpp.cpp :
定義控制臺(tái)應(yīng)?程序的??點(diǎn)。
//
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include
"CppFunction.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
DWORD start = ::GetTickCount();
CppFunction cppFunction;

int result = 0;
for (int i = 0; i < 10000; i++){
for (int j = 0; j < 10000; j++){
result += cppFunction.TestFunc(i, j);
}
}D
WORD end = ::GetTickCount();
cout <<
"Result: " << result << " Elapsed: " << end - start << endl;
return 0;
}
V
iew Code

測試純Csharp項(xiàng)?性能:
1. 新建PureCsharp項(xiàng)?: 右擊解決?案|添加|新建項(xiàng)?|已安裝|其他語?|Visual C#|控制臺(tái)應(yīng)?程序, 按缺省設(shè)置?成項(xiàng)?
2. 在配置管理器中新建x64平臺(tái), 刪除其他平臺(tái), 去掉【創(chuàng)建新的解決?案平臺(tái)】 勾選, 否則會(huì)報(bào)x64平臺(tái)已經(jīng)存在
3. C++項(xiàng)?中的代碼復(fù)制過來稍作改動(dòng), 完整代碼如下, 程序結(jié)果: Result: 1733793664 Elapsed: 729
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PureCsharp
{

class CCalc
{

public CCalc(int a, int b)
{
m_a = a;
m_b = b;
}
p
ublic int
Calc()
{

if (m_a % 2 == 0)
{

return m_a + m_b;
}
if
(m_b % 2 == 0)
{

return m_a - m_b;
}
r
eturn
m_b - m_a;
}
p
rivate int
m_a;
private int m_b;
}
c
lass
CppFunction
{

public int TestFunc(int a, int b)
{
CCalc calc =
new CCalc(a, b);
return calc.Calc();
}
}
c
lass
Program
{

static void Main(string[] args)
{
DateTime start = System.DateTime.Now;
CppFunction cppFunction =
new CppFunction();
int result = 0;
for (int i = 0; i < 10000; i++){
for (int j = 0; j < 10000; j++){
result += cppFunction.TestFunc(i, j);
}
}D
ateTime end = System.DateTime.Now;

System.Console.WriteLine("Result: " + result + " Elapsed: " + (end - start).Milliseconds);
}
}
}
V
iew Code

性能分析:
從上?的對?可以看出, 同樣的功能,
C#的耗時(shí)?乎是C++7倍, 這個(gè)例??的主要原因是, C++可以使??效的棧內(nèi)存對象
CCalc) , ?C#所有對象只能放在托管堆中。
托管
C++混合?式:
1. 新建C#控制臺(tái)項(xiàng)?, 命名為BenchCsharp, 使?它來調(diào)?C++項(xiàng)?, 修改?成?錄為: ..\x64\Release\
2.
新建C++DLL項(xiàng)?, 命名為DLLCpp, 選擇空項(xiàng)?, ?成成功, 但由于是空項(xiàng)?, 不會(huì)真正?成dll?件
3. DLLCpp為空項(xiàng)?時(shí), 在BenchCsharp中可以成功添加引?, 但當(dāng)DLLCpp中添加類后, 就不能成功添加引?了, 已經(jīng)添加的引?
也會(huì)顯?警告

4. 修改DLLCpp項(xiàng)?屬性, 右擊項(xiàng)?|屬性|配置屬性|常規(guī)|公共語?運(yùn)?時(shí)?持, 修改后就可以成功引?了
5. DLLCpp中添加CppFunction類, 并復(fù)制代碼, 完整代碼如下, 程序結(jié)果: Result: 1733793664 Elapsed: 405
// CppFunction.h
#pragma once
public ref class CppFunction
{
p
ublic
:
CppFunction(){}
~CppFunction(){}

int TestFunc(int a, int b);
};

// CppFunction.cpp
#include "CppFunction.h"
class CCalc
{
p
ublic
:
CCalc(
int a, int b)
{
m_a = a;
m_b = b;
}
i
nt
Calc()
{

if (m_a % 2 == 0){
return m_a + m_b;
}
if
(m_b % 2 == 0){
return m_a - m_b;
}
r
eturn
m_b - m_a;
}

private:
int m_a;
int m_b;
};

int CppFunction::TestFunc(int a, int b)
{
CCalc calc(a, b);

return calc.Calc();
}
V
iew Code

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BenchCsharp
{

class Program
{

static void Main(string[] args)
{
DateTime start = System.DateTime.Now;
CppFunction cppFunction =
new CppFunction();
int result = 0;
for (int i = 0; i < 10000; i++)
{

for (int j = 0; j < 10000; j++)
{
result += cppFunction.TestFunc(i, j);
}
}D
ateTime end = System.DateTime.Now;
System.Console.WriteLine(
"Result: " + result + " Elapsed: " + (end - start).Milliseconds);
}
}
}
V
iew Code

性能分析:
使?混合編程后, 性能得到了?定程度的提升, 但?起單純的
C++項(xiàng)?, 還是差了很多
C#主函數(shù)中的邏輯轉(zhuǎn)移到DLLCpp項(xiàng)?中, 即添加如下的static?法, C#中只要調(diào)?該?法, 程序結(jié)果: Result: 1733793664
Elapsed: 405

int CppFunction::Test()
{
DWORD start = ::GetTickCount();
CppFunction cppFunction;

int result = 0;
for (int i = 0; i < 10000; i++){
for (int j = 0; j < 10000; j++){
result += cppFunction.TestFunc(i, j);
}
}D
WORD end = ::GetTickCount();
cout <<
"Result: " << result << " Elapsed: " << end - start << endl;
return result;
}
V
iew Code

并沒有變得更快, 估計(jì)是當(dāng)使?【公共語?運(yùn)?時(shí)?持】 ?式編譯C++時(shí), 不能發(fā)揮C++的性能優(yōu)勢
DLLImport混合?式:
1. 新建?空的C++DLL項(xiàng)?, 命名為NativeDLLCpp
2.
CppFunction類從PureCpp中復(fù)制過來
3. 代碼如下, 運(yùn)?結(jié)果: Result: 1733793664 Elapsed: 125
// NativeDLLCpp.cpp : 定義 DLL 應(yīng)?程序的導(dǎo)出函數(shù)。
//
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include
"CppFunction.h"
using namespace std;
#ifdef __cplusplus

#define TEXPORT extern "C" _declspec(dllexport)
#else
#define
TEXPORT _declspec(dllexport)
#endif
TEXPORT int Test()
{

DWORD start = ::GetTickCount();
CppFunction cppFunction;

int result = 0;
for (int i = 0; i < 10000; i++){
for (int j = 0; j < 10000; j++){
result += cppFunction.TestFunc(i, j);
}
}D
WORD end = ::GetTickCount();
cout <<
"Result: " << result << " Elapsed: " << end - start << endl;
return result;
}
V
iew Code

public class NativeDLLCpp
{
[DllImport(
"NativeDLLCpp.dll")]
public static extern int Test();
}
c
lass
Program
{

static void Main(string[] args)
{
DateTime start = System.DateTime.Now;

int result = NativeDLLCpp.Test();
DateTime end = System.DateTime.Now;
System.Console.WriteLine(
"Result: " + result + " Elapsed: " + (end - start).Milliseconds);
}
}

View Code
性能分析:
跟純
C++項(xiàng)?性能?乎?致。
項(xiàng)?依賴項(xiàng)需要?動(dòng)設(shè)置。
實(shí)現(xiàn)聯(lián)調(diào)的?法: 修改
C#項(xiàng)?屬性|調(diào)試|啟?本機(jī)代碼調(diào)試

Copyright © 2020-2022 南京傾心軟件技術(shù)有限公司 版權(quán)所有     蘇ICP備2020070309號-1
QQ在線咨詢
13605185909
返回頂部
久久一区二区中文字幕_日韩人体视频_国产影视一区_久久爱www.
噜噜噜噜噜久久久久久91| 国产精品乱人伦一区二区 | 免播放器亚洲一区| 亚洲午夜久久久久久久久电影院| 亚洲激情黄色| 亚洲一区二区三区激情| 亚洲精品日产精品乱码不卡| 日韩视频精品在线观看| 亚洲桃花岛网站| 性做久久久久久免费观看欧美| 午夜精品福利电影| 久久亚洲一区二区| 欧美日韩国产在线播放| 国产精品久久久久久久久借妻| 国产精品三级久久久久久电影| 国产真实乱偷精品视频免| 亚洲日本精品国产第一区| 亚洲欧美另类国产| 欧美sm视频| 国产中文一区二区| 亚洲影院在线观看| 艳女tv在线观看国产一区| 国产在线视频欧美| 亚洲午夜精品久久久久久app| 久久亚洲视频| 国产日本欧美视频| 亚洲尤物在线视频观看| 欧美精品免费在线| 一区二区亚洲欧洲国产日韩| 亚洲女女做受ⅹxx高潮| 欧美午夜电影网| 亚洲最快最全在线视频| 激情婷婷亚洲| 夜夜爽夜夜爽精品视频| 亚洲高清网站| 欧美高清自拍一区| 亚洲第一网站免费视频| 久久久久九九九九| 国内精品久久久久伊人av| 亚洲欧美日韩一区| 国产午夜精品一区二区三区欧美| 亚洲免费影院| 黑丝一区二区三区| 欧美激情一区二区三区在线视频观看 | 一区二区三区欧美成人| 欧美a级一区二区| 一区二区三区高清不卡| 欧美精品一区在线| 亚洲欧美中文日韩在线| 国产主播在线一区| 美女精品在线观看| 亚洲视频axxx| 一区二区三区四区五区在线| 欧美永久精品| 亚洲精品综合在线| 欧美色欧美亚洲另类二区| 性久久久久久| 一本色道久久综合狠狠躁篇的优点 | 久久国产视频网| 日韩午夜中文字幕| 伊人天天综合| 韩国av一区二区| 国产在线精品二区| 欧美日韩另类综合| 欧美成人激情视频| 久久综合久久88| 久久―日本道色综合久久| 亚洲欧美一区二区三区久久| 亚洲乱码国产乱码精品精98午夜 | 欧美精品久久99| 久久综合久久久久88| 久久高清一区| 久久人人97超碰国产公开结果| 午夜精品一区二区三区在线播放| 日韩亚洲一区二区| 亚洲手机成人高清视频| 一区二区三区日韩| 亚洲欧美在线磁力| 久久精品国产第一区二区三区最新章节| 国产精品人人做人人爽人人添| 国产亚洲欧美一区二区| 欧美三级日韩三级国产三级| 欧美成人亚洲成人| 欧美日韩蜜桃| 国产精自产拍久久久久久| 国产欧美一区二区在线观看| 韩国一区二区三区在线观看| 亚洲三级视频| 美女网站在线免费欧美精品| 国产精品美女999| 亚洲激情电影在线| 亚洲午夜精品久久久久久浪潮| 久久精品欧美日韩| 欧美网站大全在线观看| 国精品一区二区| 午夜在线观看免费一区| 欧美日韩国产首页| 亚洲二区视频| 免费永久网站黄欧美| 伊人成人在线视频| 久久亚洲国产精品一区二区| 国产精品视频不卡| 午夜久久影院| 久久一区视频| 国产一区二区三区视频在线观看| 亚洲尤物视频在线| 国产精品欧美日韩一区二区| 亚洲一区日韩在线| 国产三级欧美三级日产三级99| 亚洲资源av| 国产亚洲精品激情久久| 欧美在线中文字幕| 国产精品美女在线观看| 亚欧成人精品| 在线免费不卡视频| 欧美日韩国产va另类| 亚洲天堂网在线观看| 国产精品久久久久久久久搜平片| 一本色道久久加勒比精品| 欧美日韩国产综合新一区| 亚洲视频视频在线| 在线观看久久av| 欧美视频官网| 久久亚洲电影| 销魂美女一区二区三区视频在线| 韩国精品久久久999| 欧美日韩国产首页| 久久久久久夜| 午夜精品区一区二区三| 亚洲欧洲一区二区三区久久| 国产亚洲欧美日韩一区二区| 欧美精品www在线观看| 久久久xxx| 久久精品国产亚洲高清剧情介绍| av不卡在线| 亚洲美女啪啪| 日韩视频在线观看| 亚洲日韩欧美一区二区在线| 精品粉嫩aⅴ一区二区三区四区| 国产伦精品一区二区三| 国产精品日韩精品| 国产精一区二区三区| 国产精品一区在线观看| 国产精品久久久久久久久久免费看 | 欧美久久影院| 另类尿喷潮videofree| 久久手机免费观看| 欧美精品入口| 欧美欧美午夜aⅴ在线观看| 欧美成年视频| 国产精品美女| 激情综合亚洲| 亚洲一区二区成人| 久久国产99| 欧美日韩精品一区二区| 国产精品久久久久久亚洲毛片| 国产麻豆综合| 99精品视频免费观看| 久久成人精品视频| 欧美三级网址| 亚洲全部视频| 久久午夜av| 国产视频亚洲| 亚洲视频网在线直播| 亚洲精品小视频在线观看| 亚洲欧美国产日韩中文字幕| 蜜臀va亚洲va欧美va天堂| 国产精品久久99| 亚洲精品久久| 久久综合一区| 狠狠色狠狠色综合日日91app| 99精品久久| 欧美精选在线| 亚洲欧洲一区| 欧美精品在线免费| 亚洲精品影院在线观看| 欧美成人精品一区二区三区| 好吊妞**欧美| 欧美高清视频一区二区三区在线观看| 国产精品美女久久久| 亚洲午夜日本在线观看| 欧美日韩国产首页在线观看| 亚洲色图在线视频| 欧美日韩一区二区三区免费看 | 国产一区二区日韩| 小嫩嫩精品导航| 国产亚洲精品久久久久动| 亚洲视频免费在线| 国产精品视频在线观看| 欧美一区二视频| 亚洲精品123区| 国产精品三级久久久久久电影| 亚洲欧美日韩精品久久亚洲区| 国产偷国产偷精品高清尤物| 久久在精品线影院精品国产| 一本色道久久综合亚洲精品高清| 国产精品亚洲不卡a| 久久免费国产| 午夜在线电影亚洲一区| 亚洲免费观看在线视频|