被xmlserializer掉坑里了,爬了一晚上才出來。
本來實現乙個功能,從資料庫中查出一堆資料(比較多,幾十萬,不過,是分批查出來的),查出來的資料報含了乙個xml字串,**中對其進行序列化,一開始的**是這樣寫的:
string xmlstring = "" +"張三20深圳南山
" + "李四
22深圳南山
" + "";
//string xmlstring2 = "張三
20深圳南山
"; for (var i = 0; i < 100000; i++)
finally
}console.writeline(i);
}console.read();
看起來沒什麼問題,不過,一到正式環境執行了幾次這個幾十萬就完蛋了,記憶體直線上公升,我在本地模擬了一下(就是上面的**撒),這麼一段小小的反序列化,一會程序就占用了近1g的空間,並且**跑完也不會自動**,測試使用gc進行**,也沒有用。後來在微軟的官網找到幫助文件(
現象:當建立一些xmlserializer物件時,記憶體會異常增加。
引起的原因:當建立這個物件時,會動態的載入一些程式集,但是我們又不可以手動銷毀這些程式集,就會導致在建立n多個xmlserializer時,記憶體會占用很多。
解決辦法:
1、使用快取,即把每次建立的xmlserializer物件使用某種方式(cache,或者static)進行快取,下次就不再建立了。
2、使用如下的建構函式:
public xmlserializer(type type);
public xmlserializer(type type, string defaultnamespace);
例如上面的**中注釋掉的部分,就是使用第乙個建構函式。使用這種方式,這個小demo中,記憶體也只占用10m左右。並且執行速度也比原來的快很多。
總覺得這個功能太坑了,看了一下系統中的**,包含原來的老**,都是存在記憶體的問題,不過,原來沒有集中宣告物件的場景,所以沒有出現,偶爾出來服務掛了,也不知道什麼 原因,反正系統又自動重啟了,就遺留觀察吧,然後就一直觀察下去,沒下文了。。。
C 使用XmlSerializer讀取Xml內容
1 book.xml檔案如下 asp.net 本質論劉湘 10.23 c 基礎孟第 50.28 2 根據book.xml 檔案生成架構檔案 book.xsd 在vs2010開啟book.xml檔案,vs2010的選單欄上出現乙個xml的選單,選擇 建立架構 vs2010會自動生成book.xsd檔案...
XmlSerializer中比SGen更深遂的問題
傳說中,net的xmlserializer使用方便功能強,我們一直用它。只不過,它需要在執行時編譯出乙個或多個專門用來解析xml的dll。為了免除這部分執行時編譯開銷,便誕生了sgen,用來預先生成解析的dll。但是,這裡有幾個沒有說清楚的問題。首先,我們是不需要去手工引用並使用生成的 xmlser...
XmlSerializer 類的使用
類user using system using system.data using system.configuration using system.web using system.web.security using system.web.ui using system.web.ui.web...