環境64位OutOfMemoryException異常是:與SqlDataAdapter的
- 64位Windows
- 〜50GB的RAM
- .NET 3.5 SP1
- SQL 2008
的代碼(基本上來自內存):
System.Data.DataTable table = new System.Data.DataTable();
SqlCommand command = new SqlCommand("SELECT XmlColumn FROM Table WHERE ID = UniqueID", Connection);
SqlDataAdapter adapter = new SqlDataAdapter(command);
adapter.Fill(table); // OOM here
正在檢索的單行是〜750M字符/〜1.5GB的文本。
這裏的一個局部堆棧跟蹤:
的System.OutOfMemoryException:類型的System.OutOfMemoryException'引發的異常。
在System.Data.SqlClient.TdsParser.ReadPlpUnicodeChars(CHAR [] &拋光輪,的Int32 offst, 的Int32 LEN, TdsParserStateObject stateObj)
在System.Data.SqlClient.TdsParser.ReadSqlStringValue(SqlBuffer 值,字節型,的Int32長度, 編碼編碼,布爾isPlp, TdsParserStateObject stateObj)
在System.Data.SqlClient.TdsParser.ReadSqlValue(SqlBuffer 值,SqlMetaDataPriv MD,的Int32 長度,TdsParserStateObject stateObj)
在System.Data.SqlClient的.SqlDataReader.ReadColumn數據()
在System.Data.SqlClient.SqlDataReader.ReadColumn(的Int32 我,布爾的setTimeout) ...
在我運行實驗,我已經確定了一個.NET字符串可以容納(準確) 1,073,741,794個字符,所以此列值在此之下是舒適的。
關於這個OOM如何發生的任何想法?謝謝
點,但是,這並不回答我的問題。 1.5GB仍然少於2GB。 – Chris 2010-10-01 01:31:44
沒錯。實際的最大值會比絕對最大值小一些。在你的情況下,這大概在1.5GB左右 – 2010-10-01 01:43:50