环境是:
- 64 位 Windows
- ~50GB 内存
- .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[]& buff, 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.ReadColumnData()
在 System.Data.SqlClient.SqlDataReader.ReadColumn (Int32 i, 布尔 setTimeout) ...
在我的实验中,我确定了一个 .NET 字符串可以容纳(确切地说)1,073,741,794 个字符,因此该列的值低于该值。
关于这个OOM如何发生的任何想法?谢谢