• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

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

    發布: 2007-6-15 17:41 | 作者: 網絡轉載 | 來源: 網絡 | 查看: 139次 | 進入軟件測試論壇討論

    領測軟件測試網

    在.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方法沒有被調用時提供一個備份的機制。垃圾收集器將執行對象的終結和防止難管理的資源的永久性泄漏。

     


    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.dllmscorwks.dll中實現。服務器版的CLR利用多處理技術使垃圾收集可以并行的完成。在單處理器環境使用工作站版本而不能使用服務器版本。

    同樣,對于垃圾收集器有高級設置項:concurrent garbage collectionnonconcurrent garbage collection。nonconcurrent設置用于服務器環境,這時應用程序無需做出響應。Concurrent設置使用在客戶端環境中,這時用戶界面被顯示且應用程序需做出響應

     


    Microsoft在Visual Studio.NET項目模塊上創建了一些缺省設置,ASP.NET應用程序能夠利用多處理器與裝載CLR的服務器版本。但是,由于Windows客戶端通常是胖客戶端,它將裝載CLR的工作站版本。

    可以使用CorBindToRuntimeEx API來覆蓋這些設置和控制在多處理器環境中將加載哪種版本的CLR

    工作效率

     

    在兩種版本的CLR中配合使用處理設計模型,開發者可以清理難于管理的資源。.NET框架提供面向垃圾收集的構架,將開發者從內存整理工作中解脫出來。這時,開發者只需要管理他使用過某些資源,因此使得工作變得簡易同時提高了工作效率。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    TAG: net 代碼 管理 內存 中的 最優化


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>