国产精品久久国产精品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
                返回頂部
                主站蜘蛛池模板: 国产涩涩视频在线观看| 日产国产一区二区不卡| 天天拍天天看天天做| 日本少妇三级hd激情在线观看| 亚洲国产区男人本色在线观看 | 大学生粉嫩无套流白浆| 九九热免费精品视频在线| 久久久www免费人成精品| 日日澡夜夜澡人人高潮| 色综合天天综合天天综| 中文字日产幕乱五区| 偷窥 亚洲 色 国产 日韩| 秋霞电影网| 吃奶揉捏奶头高潮视频在线观看| 国产高清-国产av| 亚州AV无码一区东京热久久| 隔壁邻居是巨爆乳寡妇| 精品久久精品午夜精品久久| 四虎国产精品永久地址49| 国产成人久久av免费| 日韩一区二区三区三级| 国产肉丝袜在线观看| 伊人色综合久久天天网| 欧美精品国产一区二区三区| 日韩 欧美 动漫 国产 制服| 樱花草视频www日本韩国| 国产黄色大片网站| 放荡的美妇在线播放| 国产成人精品无码专区| 欧美视频网站www色| 亚洲欧美日韩国产成人| 人妻无码αv中文字幕久久| 最新亚洲人成网站在线观看| 99人妻碰碰碰久久久久禁片| 97色偷偷色噜噜狠狠爱网站| 成年大片免费视频播放二级 | 岛国4k人妻一区二区三区| 99在线视频免费观看| 农村国产毛片一区二区三区女 | 色国产视频| 中文字幕久久久久人妻 |