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)