2010-10-01 57 views
0

環境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如何發生的任何想法?謝謝

回答

0

即使您有50GB的物理內存和使用64位操作系統,單個.NET對象的最大大小仍然是2GB

也許你應該考慮是否分配1.5GB + XML斑點確實是個好主意......(它很少是)採取

+0

點,但是,這並不回答我的問題。 1.5GB仍然少於2GB。 – Chris 2010-10-01 01:31:44

+0

沒錯。實際的最大值會比絕對最大值小一些。在你的情況下,這大概在1.5GB左右 – 2010-10-01 01:43:50