none
如何清除Web Memory, httpRuntime maxRequestLength 好像要更大? RRS feed

  • 問題

  • 由一個master gridview 按選擇 顯示detail gridview, 再按選擇彈出新window, 關閉此window, 再按master gridview 重選便好像累積了更多Memory,不夠用, 每次都不同, 上次沒有404 error, 這次有, 不知httpRuntime maxRequestLength 要多大才夠, 若重新再做多幾次相同步驟, 那不是永遠不夠用?!

    如何清除Web Memory, httpRuntime maxRequestLength 好像要更大?

    2012年2月28日 上午 02:01

解答

所有回覆

  • maxRequestLength 是管制 HTTP 上傳大小用的,和伺服器記憶體沒有關係。

    如果 Web memory 一直膨脹,那你得好好檢查的你程式的資源浪費問題 ...
    終極的作法是回收行程,就可以把所有佔用的資源釋放,但你的 application 要重新初始化,等於重新啟動。


    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure

    2012年2月28日 上午 03:13
    版主
  • 如小朱版主所言,您的問題是memory leak,而跟httpRuntime無關。

    memory leak通常跟程式寫法比較有關係,在.NET裡面有內建GC機制,但如果寫法沒寫好,也會造成即使GC運作,仍會有memory無法回收或分配的問題。

    建議您可以瞭解一下GC是怎麼運作的。


    若您的程式碼有SQL injection的問題,在修改完畢之前,我不願意給您任何解答。因為解決了您的程式問題,造成更大的系統漏洞問題,還不如讓程式壞掉。

    請參考:SQL injection簡介與解決方式

    常用資源參考:


    小弟的blog: In 91,wiki: my wiki

    2012年2月28日 上午 03:22
    版主
  • page load  if (!Page.IsPostBack) 裏有

    剛加了下面的東西也無法搞定, 大部分都用了enterprise library 的東西, 也有用using,

    看不出有什麼資源問題, 資源都是自動分配, 把以上步驟做兩次已有404 問題

    foreach (sfmProjectClass i in ie)
                    i.Dispose();
    foreach (sfmProjectSummaryClass i in ie2)
                    i.Dispose();


    • 已編輯 沈世鈞 2012年2月29日 上午 08:09
    2012年2月28日 上午 03:43
  • 第一行 SQL 和第四行 SQL 傳回多少資料量?

    Util2.ReadDatabase() 是怎麼寫的?


    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure

    2012年2月28日 上午 03:55
    版主
  • 請看我的精華

    • 已編輯 沈世鈞 2012年2月29日 上午 08:08
    2012年2月28日 上午 03:59
  • 第一個count = 278

    第二個count = 161

    這麼少已經受不了

    2012年2月28日 上午 04:01
  • 欄位數?有用 GridView 直接 Edit?

    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure

    2012年2月28日 上午 04:06
    版主
  • 看不太懂你的用語。

    請問你如何確定是記憶體不夠用?

    2012年2月28日 上午 04:12
    版主
  • Master Gridview 5個欄, Detail Gridview 22個欄

    Gridview 沒有edit 只有select link

    Master select link 會影響Detail gridview 內容, 內容全都是一行行資料

    Detail select link 會彈出window edit 資料


    • 已編輯 沈世鈞 2012年2月29日 上午 08:09
    2012年2月28日 上午 04:17
  • 如同阿尼所說,回到您最原本的發問,你怎麼知道memory不夠用了?

    404 error大部分跟memory沒有太大關係。

    另外,你喀下來的圖,有js error。

    最後,還是要請你瞭解GC的機制(例如不必要用static存放的,就不要用static,該用static的地方,就請用static。還有一個變數如果放的東西太大,佔用了太多memory,會被GC歸到一個專門處理大size的區塊,最後會導致memory碎裂片段太多,導致無法有效分配memory給新的需求使用),以及一些寫程式比較有效率的方式,才能避免製造出一些不該發生的memory leak問題。

    講這麼多,重點還是要確定,你的問題是否是memory leak造成的,不然只是無頭蒼蠅在亂繞。


    若您的程式碼有SQL injection的問題,在修改完畢之前,我不願意給您任何解答。因為解決了您的程式問題,造成更大的系統漏洞問題,還不如讓程式壞掉。

    請參考:SQL injection簡介與解決方式

    常用資源參考:


    小弟的blog: In 91,wiki: my wiki

    2012年2月28日 上午 04:56
    版主
  • request length 已到十萬以上

    這次我按3次才有404 error, 但這次status bar 沒有error

    <httpRuntime maxRequestLength="102400" />

    我也不知道是否memory 問題, 我亂估

    但很明顯是有種東西在累積

    • 已編輯 沈世鈞 2012年2月28日 上午 05:47
    2012年2月28日 上午 05:45
  • 能把您的request length的數據貼上來嗎?

    請問是用工具錄的嗎?還是一樣只是猜測?

    您一個網頁的viewstate跟page size是多少呢?該不會一堆東西存在viewstate,然後postback後就超過長度限制?

    如果是memory,應該要出現OOM的exception才對。


    若您的程式碼有SQL injection的問題,在修改完畢之前,我不願意給您任何解答。因為解決了您的程式問題,造成更大的系統漏洞問題,還不如讓程式壞掉。

    請參考:SQL injection簡介與解決方式

    常用資源參考:


    小弟的blog: In 91,wiki: my wiki

    2012年2月28日 上午 06:11
    版主
  • 以我的經驗會寫到 Memory 爆掉只有兩種狀況.
    1.寫很了不起的東西, 例如 Maya 或 3D Studio 之類的, 這種情形通常很少

    2.程式基本觀念不佳, 遇到此種情形, 請多念點書.

    2012年2月28日 上午 06:12
  • 另外,給您一個建議,您的精華sample code裡面,那一段row mapping實在是有點硬幹,什麼東西都用字串+判斷式硬幹。

    或許您可以參考一下小朱版主的文章:ORM 原理 (2) : 處理不同型別

    這是一串系列文,最好前後的文章都可以看一下,至少也用typeof去判斷,而不是用字串。判斷泛型則有IsGenericType 可以使用。取得泛型裡面的型別,也可以透過Type.GetGenericArguments 方法,範例可參考這個:http://msdn.microsoft.com/zh-tw/library/system.type.isgenerictypedefinition.aspx


    若您的程式碼有SQL injection的問題,在修改完畢之前,我不願意給您任何解答。因為解決了您的程式問題,造成更大的系統漏洞問題,還不如讓程式壞掉。

    請參考:SQL injection簡介與解決方式

    常用資源參考:


    小弟的blog: In 91,wiki: my wiki


    2012年2月28日 上午 06:27
    版主
  • 您一個網頁的viewstate跟page size是多少呢?該不會一堆東西存在viewstate,然後postback後就超過長度限制?

    如何看?

    Fiddler2 也capture 不了.

    其實很straight forward, 也沒有很多static, 除了Utils裏的function 是static, 說不上有程式基本觀念的錯誤

    2012年2月28日 上午 06:33
  • 建議您既然發問,又一些東西跟觀念不夠清楚,就請放下身段,至少您上面的sample code,就有很多可以修改的空間,真要說,那都是一堆觀念的錯誤囉。

    如同您上一個發問,您貼的程式碼也根本就沒有講到UpdatePanel,光看您的問題描述如此片段與不完整,是很難知道問題的根本原因在哪的,這一篇文章也是。

    您根本就不知道request length的意義是什麼,也不知道request length是多少,怎麼會就判定問題在這。更何況就如同小朱版主說的,那個是request送回server的request size,跟記憶體根本就沒有關係。

    而page size跟viewstate,如果您知道網頁的原理,以及ViewState的原理,就不至於問這種問題。

    簡單的說,把你的網頁另存檔案下來,檢查這個網頁的檔案size,就是你的page size了。viewstate的話,則把網頁原始碼裡面的hidden,有一個是

    <input type="hidden" name="__VIEWSTATE" id="
    
    __VIEWSTATE" value="" />

    把你value裡面的東西,copy到txt檔,存起來,看一下檔案大小,就知道viewstate佔了多大了。

    這些都是寫網頁的基本概念,您的一句『我也不知道是否memory 問題, 我亂估』,感覺就是讓一大群人不知道如何幫起。就像一個病人去看醫生,然後跟醫生說,我應該是感冒,你開藥給我,吃完藥就應該要好了。結果病的根源可能根本不是感冒,要從何醫起。


    若您的程式碼有SQL injection的問題,在修改完畢之前,我不願意給您任何解答。因為解決了您的程式問題,造成更大的系統漏洞問題,還不如讓程式壞掉。

    請參考:SQL injection簡介與解決方式

    常用資源參考:


    小弟的blog: In 91,wiki: my wiki


    2012年2月28日 上午 06:45
    版主
  • 如果不是 ViewState,你覺得是什麼東西會保存狀態?

    Web application 和 Windows application 還是有差的,不要把 Web 程式寫得和 Windows 程式一樣,否則以後你還有更多的苦頭要吃 ...


    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure

    2012年2月28日 上午 06:47
    版主
  • 我用ViewState 來保存current page and counter 怎也想不到數字能要大容量
    2012年2月28日 上午 06:58
  • http://msdn.microsoft.com/en-us/library/ms972976.aspx

    小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
    雲端學堂Facebook: http://www.facebook.com/studyazure

    2012年2月28日 上午 07:01
    版主
  • disable viewstate

    索引超出範圍。必須為非負數且小於集合的大小。
    參數名稱: index

    at

    IEnumerable<sfmProjectClass> ie = Util2.ReadDatabase<sfmProjectClass>(Temp_StartStr + " FROM Project where ProjectName='" + sfmProjectSummary.Rows[rowIndex].Cells[1].Text + "' ORDER BY ProjectName, ContractCommencement");

    成也ViewState 敗也ViewState

    • 已編輯 沈世鈞 2012年2月28日 上午 10:19
    2012年2月28日 上午 10:15
  • 如果您覺得viewstate太大才有問題,可以試試將它存在session裡,看看是否就ok了
    2012年2月28日 上午 11:27
  • 您關了ViewState,就要自己想辦法保存控制項的所有狀態,您沒做,當然Rows[rowIndex].Cells[1].Text就會發生索引超出範圍。必須為非負數且小於集合的大小。

    如同前面幾位前輩提到的幾個點,您先分析出原因,再去try 

    這樣才能找出真正的原因




    軟體開發領域裡區區一個迷途工程師
    MyBlog: http://www.dotblogs.com.tw/ian/
    開發ASP.NET您要瞭解的基楚

    2012年2月28日 上午 11:40
    版主
  • 怎樣把Viewstate 存在session

    2012年2月29日 上午 01:09
    • 已編輯 亂馬客 2012年2月29日 上午 01:41
    • 已標示為解答 沈世鈞 2012年2月29日 上午 07:00
    2012年2月29日 上午 01:40
  • 這些連結, 很専業, 完全無敵, 現在沒有錯了


    • 已編輯 沈世鈞 2012年2月29日 上午 07:11
    2012年2月29日 上午 07:01
  • 請看我的精華

    在我的印象中

    MSDN裡面把自己發問過的東西清空,您應該是第二個

    (應該是很了不起的程式碼吧,可以解決福島核電廠的危機...... 或是可以轉賣個幾百萬美金 ?!)

    以前有一個人,偽裝小妹妹(裝成女生)來發問,被人揭發以後,見小轉生氣(惱羞成怒)

    也做過這種事。


    我的書 與 ASP.NET教學網站 http://www.dotblogs.com.tw/mis2000lab/

    2012年3月1日 上午 03:42
  • 這跟我的問題沒有關係

    人人都說任何人都能想到和做到編程, 為什麼會在乎別人的代碼呢

    我深信別人會比我做得更好

    • 已編輯 沈世鈞 2012年3月7日 上午 06:17
    2012年3月7日 上午 06:13