熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

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

2022-06-13   來源: Java核心技術 

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

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

  Microsoft在Visual StudioNET項目模塊上創建了一些缺省設置ASPNET應用程序能夠利用多處理器與裝載CLR的服務器版本但是由於Windows客戶端通常是胖客戶端它將裝載CLR的工作站版本
  
  可以使用CorBindToRuntimeEx API來覆蓋這些設置和控制在多處理器環境中將加載哪種版本的CLR
  
  工作效率
   在兩種版本的CLR中配合使用處理設計模型開發者可以清理難於管理的資源NET框架提供面向垃圾收集的構架將開發者從內存整理工作中解脫出來這時開發者只需要管理他使用過某些資源因此使得工作變得簡易同時提高了工作效率
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25952.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.