C 中XmlSerializer的記憶體占用問題

2022-03-17 11:27:49 字數 1142 閱讀 6369

被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...