我有一种情况,在使用SqlDataReader时,我在读取 9k 文本字段时一直收到 System.OutOfMemory 错误。这发生在 MsTest 测试中,并且至少目前一直在发生。
我相当肯定所有 SqlConnections、SqlDataReaders 和 SqlCommands 都包装在using
块中。指定System.Data.CommandBehavior.SequentialAccess
何时执行阅读器无效。
SqlConnection.ClearAllPools()
但是,如果我在测试的麻烦部分打开连接之前拨打电话,问题就会消失。
为什么连接池会占用过多的内存?
编辑:这是堆栈跟踪的相关部分
at System.Data.SqlClient.TdsParser.TryReadPlpUnicodeChars(Char[]& buff, Int32 offst, Int32 len, TdsParserStateObject stateObj, Int32& totalCharsRead)
at System.Data.SqlClient.TdsParser.TryReadSqlStringValue(SqlBuffer value, Byte type, Int32 length, Encoding encoding, Boolean isPlp, TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.TryReadSqlValue(SqlBuffer value, SqlMetaDataPriv md, Int32 length, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.TryReadColumnInternal(Int32 i, Boolean readHeaderOnly)
at System.Data.SqlClient.SqlDataReader.TryReadColumn(Int32 i, Boolean setTimeout, Boolean allowPartiallyReadColumn)
at System.Data.SqlClient.SqlDataReader.GetValueInternal(Int32 i)
at System.Data.SqlClient.SqlDataReader.GetValue(Int32 i)
at System.Data.SqlClient.SqlDataReader.get_Item(Int32 i)