2009-01-06 41 views
2

代碼段獲得 '的System.OutOfMemoryException':轉換字節數組時串

//byte[] myByteArray = byte array from database (database BLOB) 
myByteArray = (byte[]) ((dbCommand.Parameters["parameter"].Value)); 

string myString =System.Text.Encoding.UTF8.GetString(myByteArray); 

Xmldocument doc = new Xmldocument(); 
doc.Load(myString); 

============

我有時得到System.OutOfMemoryException

string myString = System.Text.Encoding.UTF8.GetString(myByteArray); 

將bytearray轉換爲字符串時我得到這個錯誤。

有沒有一種方法可以使此代碼健壯。

我所要做的就是加載字節數組中的BLOB,然後將它們轉換爲字符串 並將它們加載到xmldocument中以便使用。

+0

myByteArray有多大? – ctacke 2009-01-06 18:56:59

+0

http://www.java2s.com/Code/Java/Collections-Data-Structure/Convertbytearraytostring.htm – 2015-09-03 19:06:06

回答

7

如果你有一個包含XML文本的字符串,你實際上需要XmlDocument.LoadXML。 XmlDocument.Load將字符串視爲URL。

也就是說,XmlDocument.Load重載了XmlReader,TextReader或Stream。你可以在底層字節數組上創建一個MemoryStream,並傳遞它;這避免了字符串轉換。

1

XmlDocument.Load(String)嘗試從作爲參數給定的URL加載XML文檔,即嘗試將可能的HUGE字符串解釋爲URL。難怪有什麼問題。

改爲使用LoadXml()。

1

這聽起來像你的blob太大,不適合內存作爲一個字符串。不要忘記,ASCII值的大小是字符串的兩倍,它們是二進制形式。這些數值有多大

之後你需要做些什麼?你將它載入爲XML(儘管Roger說,你真的需要LoadXml),但不是你打算在之後做什麼。你能做一些流式數據嗎?如果是這樣,請將字節數組包裝到MemoryStream中,然後在其上使用StreamReader。

0

Strings/StringBuilders需要連續的內存塊,所以OutOfMemoryException與堆的碎片密切相關。

這就是說,你需要大塊輸入或已建議使用流。

相關問題