【发布时间】:2011-04-19 15:17:49
【问题描述】:
环境是:
- 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 长度, 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 是如何发生的任何想法?谢谢
【问题讨论】:
标签: .net-3.5 64-bit out-of-memory sqldataadapter