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

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

代碼最優化.NET中的內存管理

2019-11-18 12:06:05
字體:
來源:轉載
供稿:網友

  在.NET中,內存治理是自動進行的。內存的再收集屬于后臺任務,這使開發者們更專注于手邊的工作。在這篇文章中,我們來看一看為開發者提供幫助并且控制垃圾收集的接口。
  
  處理設計模式(Dispose design pattern): IDisposable, Dispose, Finalize
  
  共同語言運行時(CLR)無法清理數據庫連接、窗口句柄、文件句柄一類的資源。因此,為開發者提供清理這類難治理的資源的機制是很有必要的。清理工作可以在Finalize方法中實現,Finalize方法在C#語言中被實現為垃圾破壞者。該方法的調用在垃圾收集器的控制下進行。
  
  通常,你會需要一個確定的方法來清理像文件句柄一類難治理的資源。例如,現在你打開了一個文件進行寫操作,當你結束將文件內容載入緩沖器后,你可能需要明確的關閉文件句柄。對于這類顯式清理,.NET提供了處理設計模式(dispose design pattern)
  
  需要進行顯示清理的對象需實現IDisposable接口。IDisposable接口提供了Dispose方法,該方法不像Finalize方法,它不在開發者的控制之下。
  
  既然Dispose方法的調用是顯示清理,使用垃圾收集器收集這些對象沒有必要。因此Dispose方法應該包含一個對GC.SupPRessFinalize()的調用,提示垃圾收集器在這個對象上不需要使用Finalize方法。
  
  推薦在一個需要進行顯示清理的對象上同時實現Finalize 和Dispose方法。Finalize方法在Dispose方法沒有被調用時提供一個備份的機制。垃圾收集器將執行對象的終結和防止難治理的資源的永久性泄漏。
  
 代碼最優化.NET中的內存治理(圖一)

  在 Listing A中的代碼片斷更清楚的描述了這些概念。
  
  在Listing A中,SampleClass類使用了一個文件句柄,這是一個難治理的資源。因此,應為該對象實現IDisposable接口和提供Finalize方法。
  
  用來清理文件句柄的代碼是Dispose方法的一部分。GC.SuppressFinalize()在難治理資源被清除時也將被調用。
  
  該類同時提供了垃圾破壞器(Finalize方法),也包含了用于清理難治理資源(文件句柄)的代碼。
  
  弱引用
  .NET框架提供了另一有趣的特色,被用于實現多樣的高速緩存。在.NET中弱引用通過System.WeakReference類實現。弱引用為引用的對象提供一項機制,使被引用的對象能夠被垃圾收集器作用。asp.net高速緩存就使用了弱引用。假如內存使用率太高,高速緩存將被清除。
  
  強制垃圾收集
   .NET框架為開發者提供System.GC類來控制垃圾收集器的一些方面。垃圾收集可以通過調用GC.Collect方法強制執行。通常建議不要手動的調用垃圾收集器,而將其設置為自動方式。在某些情況下,開發者會發現強制垃圾收集將推進性能。但是,使用這個方法需要非常小心,因為在垃圾收集器運行時將延緩當前執行的線程。GC.Collect方法不應位于可能被經常調用的地方。這樣做將使應用程序的性能降級。
  
  .NET中的服務器和工作站版本
  .NET構架包括相同的CLR的兩種版本,分別對應于特定的目的。將他們分類為服務器運行時和工作站運行時,并分別在mscorsvr.dll和mscorwks.dll中實現。服務器版的CLR利用多處理技術使垃圾收集可以并行的完成。在單處理器環境使用工作站版本而不能使用服務器版本。
  
  同樣,對于垃圾收集器有高級設置項:concurrent garbage collection和nonconcurrent garbage collection。nonconcurrent設置用于服務器環境,這時應用程序無需做出響應。Concurrent設置使用在客戶端環境中,這時用戶界面被顯示且應用程序需做出響應
  
代碼最優化.NET中的內存治理(圖二)

  Microsoft在Visual Studio.NET項目模塊上創建了一些缺省設置,ASP.NET應用程序能夠利用多處理器與裝載CLR的服務器版本。但是,由于Windows客戶端通常是胖客戶端,它將裝載CLR的工作站版本。
  
  可以使用CorBindToRuntimeEx API來覆蓋這些設置和控制在多處理器環境中將加載哪種版本的CLR
  
  工作效率
   在兩種版本的CLR中配合使用處理設計模型,開發者可以清理難于治理的資源。.NET框架提供面向垃圾收集的構架,將開發者從內存整理工作中解脫出來。這時,開發者只需要治理他使用過某些資源,因此使得工作變得簡易同時提高了工作效率。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平果县| 乌什县| 那坡县| 资阳市| 咸阳市| 深水埗区| 穆棱市| 托里县| 南京市| 蕲春县| 象州县| 晴隆县| 互助| 芒康县| 河东区| 岳普湖县| 长海县| 南投市| 勐海县| 灌云县| 亚东县| 鹤庆县| 手机| 三明市| 峨眉山市| 丰原市| 河南省| 蓝田县| 嘉义县| 四会市| 大英县| 隆尧县| 静海县| 图木舒克市| 北安市| 枝江市| 罗平县| 双城市| 长乐市| 蕉岭县| 江都市|