国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

關于靜態方法與非靜態方法的執行效率

2019-11-06 06:16:00
字體:
來源:轉載
供稿:網友

  以前看到許多網友認為靜態方法要比實例方法在執行效率上要快一些,當初不敢茍同。自己親自試了一把,發現靜態方法確實要快一些。

  想要比較靜態方法與非靜態方法的執行效率,需要對CLR在調用靜態方法與非靜態方法時的不同之處要有一個了解。

  靜態方法是與類相關聯的,CLR在調用一個靜態方法時需要做的事情就是找到定義該方法的類型即可實現調用;而在調用非靜態方法時,為了保證運行安全,CLR會對我們的源代碼進行驗證并額外的生成一些IL中間代碼來確保運行安全,所以在調用一個非靜態方法時,CLR首先是判定被調用對象是否為NULL,如果為NULL,則引發一個異常,反之,則根據對象推薦出其類型,最后實現調用??梢钥闯鰜恚谡{用靜態方法來非靜態方法時,后者比前者多做了一些工作,這將造成性能上的損失。所以,靜態方法在執行效率上可能要比非靜態方法要好一些。IL中可以看到非靜態方法執行的是callvirt 指令:

  CLR via C#的解釋調用一個靜態方法時,CLR會定位與定義靜態方法的類型對應的類型對象。然后,JIT編譯器在類型對象的方法表中查找與被調用的方法對應的記錄項,對方法進行JIT編譯(如果需要的話),再調用JIT編譯的代碼。過程圖如下:

  一般情況下聲明靜態方法的類大多是工具類,并且這些靜態方法不需要訪問類型中的非靜態字段和事件,也就是說靜態方法與該類型中的非靜態字段和事件不具有邏輯上的關聯性。如果一個方法聲明為靜態方法,也意味著不能被重寫,該方法失去面向對象的擴展和多態的特性。

總結:靜態方法與實例方法在性能和占用內存上沒有明顯的區別,是否聲明為靜態方法需要從類型的非靜態字段、事件、面向對象擴展和多態這三方面來考慮。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 铜梁县| 南和县| 攀枝花市| 进贤县| 湄潭县| 江川县| 兴化市| 铜鼓县| 金门县| 南岸区| 华蓥市| 独山县| 武乡县| 漳平市| 黄石市| 济宁市| 镇江市| 宁阳县| 平昌县| 惠来县| 寿阳县| 兴城市| 新巴尔虎左旗| 东城区| 桦甸市| 无为县| 沁水县| 叙永县| 济源市| 治多县| 贵溪市| 淮南市| 嘉峪关市| 潜山县| 乌恰县| 长武县| 绩溪县| 博白县| 万宁市| 巴东县| 麟游县|