国产精品久久国产精品99 gif,国产精品久久久久久久伊一,中文字幕在线观看,天美传媒精品1区2区3区,亚洲情a成黄在线观看动漫尤物 ,久久精品国产久精国产一老狼,亚洲殴美国产日韩av,中文无码字幕中文有码字幕

                南京軟件定制開發

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

                13605185909

                新聞資訊

                NEWS CENTER
                欄目導航

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

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

                ThinkPad T430 i5-3230M 2.6G 8GWin7 64BitVS2013C++開發設置) , C++C#都采?x64平臺, 性能驗證使?Release版本。
                測試純
                C++項?性能:
                1. 新建空解決?案: ?件|新建|項?|已安裝|模板|其他項?類型|Visual Studio解決?案|空?解決?案
                2. 新建PureCpp項?: 右擊解決?案|添加|新建項?|已安裝|Visual C++|Win32控制臺程序, 按缺省設置?成項?
                3. 在配置管理器中新建x64平臺, 刪除其他平臺
                4. 新建CppFunction, 并添加測試代碼, 完整代碼如下, 程序結果: 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 :
                定義控制臺應?程序的??點。
                //
                #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項?性能:
                1. 新建PureCsharp項?: 右擊解決?案|添加|新建項?|已安裝|其他語?|Visual C#|控制臺應?程序, 按缺省設置?成項?
                2. 在配置管理器中新建x64平臺, 刪除其他平臺, 去掉【創建新的解決?案平臺】 勾選, 否則會報x64平臺已經存在
                3. C++項?中的代碼復制過來稍作改動, 完整代碼如下, 程序結果: 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#的耗時?乎是C++7倍, 這個例??的主要原因是, C++可以使??效的棧內存對象
                CCalc) , ?C#所有對象只能放在托管堆中。
                托管
                C++混合?式:
                1. 新建C#控制臺項?, 命名為BenchCsharp, 使?它來調?C++項?, 修改?成?錄為: ..\x64\Release\
                2.
                新建C++DLL項?, 命名為DLLCpp, 選擇空項?, ?成成功, 但由于是空項?, 不會真正?成dll?件
                3. DLLCpp為空項?時, 在BenchCsharp中可以成功添加引?, 但當DLLCpp中添加類后, 就不能成功添加引?了, 已經添加的引?
                也會顯?警告

                4. 修改DLLCpp項?屬性, 右擊項?|屬性|配置屬性|常規|公共語?運?時?持, 修改后就可以成功引?了
                5. DLLCpp中添加CppFunction類, 并復制代碼, 完整代碼如下, 程序結果: 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++項?, 還是差了很多
                C#主函數中的邏輯轉移到DLLCpp項?中, 即添加如下的static?法, C#中只要調?該?法, 程序結果: 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

                并沒有變得更快, 估計是當使?【公共語?運?時?持】 ?式編譯C++時, 不能發揮C++的性能優勢
                DLLImport混合?式:
                1. 新建?空的C++DLL項?, 命名為NativeDLLCpp
                2.
                CppFunction類從PureCpp中復制過來
                3. 代碼如下, 運?結果: Result: 1733793664 Elapsed: 125
                // NativeDLLCpp.cpp : 定義 DLL 應?程序的導出函數。
                //
                #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++項?性能?乎?致。
                項?依賴項需要?動設置。
                實現聯調的?法: 修改
                C#項?屬性|調試|啟?本機代碼調試

                Copyright © 2020-2022 南京傾心軟件技術有限公司 版權所有     蘇ICP備2020070309號-1
                QQ在線咨詢
                13605185909
                返回頂部
                主站蜘蛛池模板: 成人无码区免费视频| 国产精品毛片更新无码| 久久大香伊蕉在人线免费AV| 人人玩人人添人人澡超碰| 欧美疯狂黑人xxxxbbbb| 国产在线午夜不卡精品影院 | 久久精品国产亚洲77777| 一本色道久久加勒比综合| 欧美丰满熟妇hdxx| 久久精品人妻无码专区| 亚洲国产一区二区三区| 国产chinese男男gaygay网站| 熟妇的味道hd中文字幕| 自拍偷区亚洲综合激情| 毛片亚洲AV无码精品国产午夜| 亚洲深深色噜噜狠狠爱网站| 久久无码av一区二区三区电影网| 综合在线 亚洲 成人 欧美| 日本高清一区免费中文视频 | 国产亚洲精品福利在线无卡一| 亚洲多毛妓女毛茸茸的| 久久人人爽人人爽爽久久小说| 中文字幕国产精品一二区| 蜜桃视频网站| 国产午夜亚洲精品一区| 亚洲欧美日韩综合一区在线| 无码成人AV在线一区二区| 一区二区亚洲精品国产片| 国内精品久久久久影视| 欧美成人免费看片一区| 国产乱人伦av麻豆网| 成熟女人牲交片免费| 色偷偷亚洲女人天堂观看| 国产人妻精品一区二区三区不卡 | 一边吃胸一边揉下面的视频| 偷青青国产精品青青在线观看| 色欲色欲久久综合网| 97se亚洲国产综合在线| 国产91在线|中文| 美女又黄又免费的视频| 亚洲国产呦萝小初|