<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Hopes

    Start Here..

     

    轉 ASP.NET中的OutOfMemoryException

    一,運行時錯誤
    首先程序的異常,甚至錯誤是在所難免的,但當系統出現異常時,應該提供給用戶一個友好的界面,并簡單說明原因,對這個問題,我一般的解決辦法是
    <customErrors mode="Off" /> 這里可以不用配置
    然后在HttpModule的Application_Error事件中檢測所有Error,并跳轉到指定友好頁面另外也可以在所有頁面的基類的Page_Error事件中檢測,并跳轉到指定友好頁面,ASP.NET forums提供的解決方案,我覺得已經很優秀了,博客堂的寶玉提供這方面的很好的介紹

     

    二,OutOfMemoryException異常如何處理
    什么情況下會出現OutOfMemonryException呢?

    引<<.net框架程序設計修訂版>>的話: 在我們試圖新建一個對象時,而垃圾收集器又找不到任何可用內存時被拋出,這種情況下我們是可以捕獲該異常的,另一種情況是,CLR需要內存時,而卻系統卻不能提供,也會拋出該異常,但此時,我們的應用程序是不能捕獲該錯誤的

    <<.net框架程序設計修訂版>>把OutOfMemoryException異常列為開發人員幾乎從來不會考慮的隱含假設,也就是說,很多開發人員根本不考慮該異常發生的可能并做出處理,起碼我在我開發的系統里并沒有專門考慮這個異常

    我現在考慮的問題是:
    1,如果是新建對象找不到可用內存拋出該異常,那么在HttpModule的Application_Error事件能否捕獲改錯誤?我的想法是,即使可以捕獲,也是不能得到處理的,因為自定義的異常處理仍然需要內存來運行,所以無論能否捕獲,都不能做友好處理

    2,如果CLR找不到需要的內存情況下拋出改異常,那就更不能處理了

    也就是說,幾乎在任何情況下,我們都無法在系統出現OutOfMemoryException異常提供友好界面?

     

    服務器配置方面
    1. 安裝.NET Framework 1.1 Service Pack 1補丁部分解決了一些內存泄漏的問題,下載地址為:http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38


    2.使用更多的內存
          a.打開/3GB Switch(如果你有3GB以上的內存)。這個配置只在Windows 2000 Advanced Server和Data Center版本以及Windows Server 2003以上才支持,參見:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/scalenetchapt17.asp
    http://support.microsoft.com/default.aspx?scid=kb;en-us;820108
          b.即使你有很多內存,但.NET(注意不是ASP.NET工作進程,而是.NET整個使用的內存是有一定限制的,可以通過加大配置使用量來減少內存溢出的發生。方法如下:修改machine.config文件,一般在%System%/Microsoft.Net/Framework/v1.1.4322/CONFIG目錄中, 修改processModel元素中的memoryLimit,大于缺省設置的60(意味著物理內存的60%)。


    3.回收工作線程
    設置IIS定期清除Work process是避免此異常的一個較好的方式。但這個功能是IIS 6.0(也就是Windows 2003上帶的IIS)才支持。配置方法如下:修改IIS的應用程序池配置,選擇DefaultAppPool(如果你的系統是用這個池),右鍵點屬性->Recycling Setting,然后選擇根據情況 修改“Recycle worker processes at the following times:'等幾項配置,其中定時回收工作進程是一個比較好的方式,可以避免回收工作進程時,引起客戶Session丟失。
    Windows 2000 server 上安裝的是IIS 5.0,本身不支持Recycle,但要想實現這個功能也不難。微軟針對IIS提供的IIS5Recycle便是這樣一個程序,它安裝后以服務形式提供回收工作進程。
    安裝說明見http://support.microsoft.com/?id=322350


    代碼編寫方面的注意問題
    1.System.Drawing方面的類使用問題
    System.Drawing用到了很多系統的資源和非托管代碼,所以使用的時候要特別小心,注意內存泄漏(Memory Leak)例如:BitMap.MakeTransparent方法的使用問題:http://www.dotnet247.com/247reference/msgs/40/202528.aspx


    2.new byte[]問題
    處理流的時候常常會用到new一個大的byte數組。但在多用戶情況下會消耗大量的內存。正確的做法應該是定義一個比較小的byte數組做為緩存,然后循環使用。如在我們的程序中,有些地方使用不當,當圖片(或附件)過大或過多的時候, new byte[length]就有可能消耗過多的內存。
    3. 避免使用大對象數組或小對象大數組
    編程時同樣要重視效率問題(包括內存占用問題)。
    4.Com接口調用是要注意釋放對象。
    posted on 2005-01-25 13:37 Chainet
    事件類型:錯誤
    事件來源:Application
    事件種類:無
    事件 ID:0
    日期:2005-11-19
    事件:15:40:49
    用戶:N/A
    計算機:WEBHOST1
    描述:事件 ID ( 0 )的描述(在資源( Application )中)無法找到。本地計算機可能沒有必要的注冊信息或消息 DLL 文件來從遠程計算機顯示消息。您可能可以使用 /AUXSOURCE= 標識來檢索詞描述;查看幫助和支持以了解詳細信息。下列信息是事件的一部分: System.OutOfMemoryException: 發生類型為 System.OutOfMemoryException 的異常。
    http://blog.joycode.com/kaneboy/archive/2005/05/07/50409.aspx



    在博客園看到了一位園友寫的文章《如何處理OutOfMemoryException異常?》,于是想和大家交流一下ASP.NET中出現OutOfMemoryException的問題。

    實際上,在ASP.NET Web服務器上,ASP.NET所能夠用到的內存,通常不會等同于所有的內存數量。在machine.config配置文件中,配置節<processModel>中有一個屬性“memoryLimit”,這個屬性的值是一個百分值,默認為“60”,即指定了ASP.NET進程(在任務管理器中大家就可以看到ASP.NET的進程,IIS5中為aspnet_wp,IIS6中為w3wp)能夠使用所有物理內存的60%。當ASP.NET使用的內存量超過這個限額時,IIS會開始自動回收(recycle)進程,即創建一個新的進程去負責應付Http請求,而將舊進程所占用的內存回收。

    當我們有一臺很大內存的服務器時,“memoryLimit”這個值是需要進行適當的調整的。比如我們準備了一臺4G內存的服務器,那么4G×60%=2.4G。但是,對于Win32操作系統,一個進程所能占用的所有內存空間只有2G。當ASP.NET進程占用的內存開始達到2G時,由于它并沒有達到2.4G的“回收閾值”,所以IIS不會啟動recycle進程操作,但是由于Win32的限制,實際上已經不能給這個進程分配更多的內存了,于是,OutOfMemoryException就很可能會被拋出了。為了避免這樣的情況,我們就必須將“memoryLimit”適當調小,以讓IIS更早的進行進程回收。

    微軟推薦的ASP.NET進程占用內存是不超過60%,并最好使計算出的實際值不超過800M。就是說,對于一臺4G內存的服務器,最好將“memoryLimit”屬性設置成“20”。設置一個適當的回收閾值,讓IIS適時的進行進程回收,對于保證整個服務器的穩定運行,避免OutOfMemoryException是非常重要的。

    在IIS6中,ASP.NET進程的回收閾值不再由配置節中的“memoryLimit”屬性決定,而是由IIS管理器中的應用程序池配置中的設置決定。

    但是,即使正確設置了這些配置,也不能保證完全避免OutOfMemoryException的發生,原因可能是多樣而復雜的,比如內存回收操作可能耗時太多等等。開發人員要注意的,就是在代碼中時刻牢記不要無謂的使用和浪費內存。:)

    如果你有一臺大內存的服務器,同時對Win32操作系統中對于進程最高使用2G內存的限制很郁悶,可選的解決方法有兩個:
    1、使用/3GB模式啟動計算機,方法參加文后的鏈接
    2、使用Windows Server 2003 64bits Edition

    posted on 2012-12-14 15:00 ** 閱讀(109) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    統計

    公告

    你好!

    常用鏈接

    留言簿(2)

    隨筆檔案

    文章分類

    文章檔案

    新聞檔案

    相冊

    收藏夾

    C#學習

    友情鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费看国产一级片| 亚洲黄色在线电影| 七色永久性tv网站免费看| 亚洲国产精品yw在线观看| 俄罗斯极品美女毛片免费播放| 中国极品美軳免费观看| 亚洲国产午夜电影在线入口| 全黄性性激高免费视频| 亚洲免费电影网站| 老司机午夜精品视频在线观看免费| 亚洲伦理一区二区| 国产一级特黄高清免费大片| 99久久精品免费精品国产| 久久亚洲中文无码咪咪爱| 久久久久亚洲AV无码网站| 又粗又硬又大又爽免费视频播放| 国产偷伦视频免费观看| 精品亚洲国产成人av| 亚洲最大免费视频网| 国产亚洲精品影视在线产品| 97在线观免费视频观看| 两个人看的www免费视频| 亚洲乱亚洲乱妇24p| 亚洲自偷自拍另类12p| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲AV无码精品蜜桃| 黑人大战亚洲人精品一区 | 成人A级毛片免费观看AV网站| 国产福利在线观看永久免费| 亚洲一区二区三区国产精华液| 亚洲AV一宅男色影视| 免费日本黄色网址| 成人片黄网站A毛片免费| 精品无码AV无码免费专区| 一级做a爰片久久免费| 亚洲丶国产丶欧美一区二区三区| 亚洲一区中文字幕久久| 九月丁香婷婷亚洲综合色| 亚洲欧洲久久av| 免费播放特黄特色毛片| 黄网址在线永久免费观看|