最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用Dynamic實現(xiàn)簡化反射

 更新時間:2023年07月24日 15:05:55   作者:可均可可  
這篇文章主要為大家詳細介紹了C#如何使用Dynamic來實現(xiàn)簡化反射,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下

最近有時間看點書了,把157個建議在重新看一遍,代碼都調(diào)試一遍。當我看到第15個建議的時候有些出入,就記錄下來,歡迎大家來探討。

第十五條建議是,使用dynamic簡化反射的使用,如果是針對這句話來講,沒問題,是正確的。dynamic的確可以簡化反射的使用,但是從性能上來說是有條件的,可以根據(jù)自己情況選擇。

我按著書上的代碼,原封不動的敲了一遍,如下:

class Program
    {
        static void Main(string[] args)
        {
            int times = 1;
            DynamicSample dynamicSample = new DynamicSample();
            var addMethod = typeof(DynamicSample).GetMethod("Add");
            Stopwatch watch1 = Stopwatch.StartNew();
            int result = 0;
            for (int i = 0; i < times; i++)
            {
                result = (int)addMethod.Invoke(dynamicSample, new object[] { 1, 2 });
            }
            Console.WriteLine(string.Format("正常的反射耗時:{0}毫秒", watch1.ElapsedMilliseconds));
            Console.WriteLine("正常反射的結(jié)果:"+result);
            dynamic dynamicSample2 = new DynamicSample();
            int result2 = 0;
            Stopwatch watch2 = Stopwatch.StartNew();
            for (int i = 0; i < times; i++)
            {
                result2 = dynamicSample2.Add(1, 2);
            }
            Console.WriteLine(string.Format("Dynamic的反射耗時:{0}毫秒", watch2.ElapsedMilliseconds));
            Console.WriteLine("Dynamic反射的結(jié)果:"+result2);
            DynamicSample reflectSamplebetter = new DynamicSample();
            var addMethod2 = typeof(DynamicSample).GetMethod("Add");
            var delg = (Func<DynamicSample, int, int, int>)Delegate.CreateDelegate(typeof(Func<DynamicSample, int, int, int>), addMethod2);
            int result3 = 0;
            Stopwatch watch3 = Stopwatch.StartNew();
            for (int i = 0; i < times; i++)
            {
                result3=delg(reflectSamplebetter,1,2);
            }
            Console.WriteLine(string.Format("優(yōu)化的反射耗時:{0}毫秒", watch3.ElapsedMilliseconds));
            Console.WriteLine("優(yōu)化的反射結(jié)果:"+result3);
            Console.Read();
        }
    }

對了,還有我們的測試實體類:

public class DynamicSample
    {
        public string Name { get; set; }
        public int Add(int a, int b)
        {
            return a + b;
        }
    }

我們都知道反射是有損性能的,無論是使用正常反射還是dynamic都是不好的,盡量不要使用,這是我的建議。

如果非要用反射,就性能來講,三者之間也是有選擇的,不是說dynamic就是好的,如果就簡化反射來說是好的,但是性能并不是那么好。

我先測試一下:一次循環(huán)的結(jié)果如下

很明顯,正常的反射和優(yōu)化后的反射要好,dynamic就差點了,在測試10000次循環(huán):

在一萬次循環(huán)的情況下,優(yōu)化后的反射依然那么給力,正常反射的性能也不錯,dynamic就差很多了。

我們再看看十萬次循環(huán)怎么樣?這次測試三次,看看每次的結(jié)果。

100000次第一次測試結(jié)果:

100000次第二次測試:

100000次第三次測試:

十萬次測試,總體上來看,性能最好的還是優(yōu)化后的反射,正常的反射要好一點,dynamic是最差的。

最后測試一百萬次循環(huán),第一次測試結(jié)果:

百萬第二次,看看結(jié)果:

總體上來看,百萬循環(huán),dynamic的好處才看到,性能也不錯,又簡化反射的使用,性能最好還是優(yōu)化后翻身,大家明白了吧,不是任何時候dyanmic都是有用的。

好了,就記錄這么多吧,可能測試的不全面,希望大家包涵。

選擇條件是,反射能不用就不用,如果注重性能,優(yōu)化后的反射使用方法是最好的,如果不是很復雜,用正常反射就可以,除非循環(huán)真的要那么多次,但是dynamic是真的可以簡化反射使用,對性能是分條件的。

到此這篇關(guān)于C#使用Dynamic實現(xiàn)簡化反射的文章就介紹到這了,更多相關(guān)C# Dynamic簡化反射內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在Form_Load里面調(diào)用Focus無效的解決方法

    在Form_Load里面調(diào)用Focus無效的解決方法

    在調(diào)用Form_Load的時候,F(xiàn)orm其實還沒有進入展示階段,自然Focus()調(diào)用也就沒效果了。
    2013-02-02
  • C# 對MongoDB 進行增刪改查的簡單操作實例

    C# 對MongoDB 進行增刪改查的簡單操作實例

    這篇文章介紹了C# 對MongoDB 進行增刪改查的簡單操作實例,有需要的朋友可以參考一下
    2013-09-09
  • Unity實現(xiàn)批量Build打包詳解

    Unity實現(xiàn)批量Build打包詳解

    一般來講如果項目是PC或Android、IOS端不會有批量Build打包這樣的需求,但如果項目是WebGL端可能會遇到這樣的需求。本文主要為大家介紹Unity中如何實現(xiàn)Build批量打包的,需要的朋友可以參考一下
    2021-12-12
  • 使用淘寶ip地址庫查ip的示例

    使用淘寶ip地址庫查ip的示例

    這篇文章主要介紹了使用淘寶ip地址庫查ip的示例,需要的朋友可以參考下
    2014-03-03
  • C# dll代碼混淆加密的實現(xiàn)

    C# dll代碼混淆加密的實現(xiàn)

    本文主要介紹了C# dll代碼混淆加密的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • C#實現(xiàn)矩陣加法、取負、數(shù)乘、乘法的方法

    C#實現(xiàn)矩陣加法、取負、數(shù)乘、乘法的方法

    這篇文章主要介紹了C#實現(xiàn)矩陣加法、取負、數(shù)乘、乘法的方法,涉及C#針對矩陣的數(shù)學運算相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2015-08-08
  • C#調(diào)用exe文件的方法詳解

    C#調(diào)用exe文件的方法詳解

    這篇文章主要為大家詳細介紹了C#調(diào)用exe文件的相關(guān)方法,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2024-04-04
  • C#編寫一個控制臺程序的實現(xiàn)串口通信示例

    C#編寫一個控制臺程序的實現(xiàn)串口通信示例

    本文主要介紹了C#編寫一個控制臺程序的實現(xiàn)示例,實現(xiàn)串口通信功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-07-07
  • C#解析char型指針所指向的內(nèi)容(實例解析)

    C#解析char型指針所指向的內(nèi)容(實例解析)

    在c++代碼中定義了一個功能函數(shù),這個功能函數(shù)會將計算的結(jié)果寫入一個字符串型的數(shù)組中output,然后c#會調(diào)用c++導出的dll中的接口函數(shù),然后獲取這個output并解析成string類型,本文通過實例解析C#?char型指針所指向的內(nèi)容,感興趣的朋友一起看看吧
    2024-03-03
  • C# Dockpanel入門基礎必看篇

    C# Dockpanel入門基礎必看篇

    這篇文章主要介紹了C# Dockpanel入門基礎必看篇,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論

行唐县| 昌都县| 同心县| 鸡西市| 理塘县| 柞水县| 成武县| 商丘市| 平阴县| 潼关县| 海宁市| 武汉市| 都匀市| 霞浦县| 翁源县| 阳泉市| 义马市| 嘉黎县| 上高县| 蓬溪县| 稻城县| 尼玛县| 武定县| 吴桥县| 金山区| 镇雄县| 华坪县| 云安县| 浑源县| 德惠市| 景德镇市| 合江县| 靖远县| 韶山市| 富民县| 乌兰察布市| 德安县| 遵义县| 泗阳县| 麻城市| 登封市|