私はVB.NETコードの最も単純な部分で非常に奇妙な問題を抱えています:
Public Sub ReadIDs(i_oDataReader As Data.SqlClient.SqlDataReader)
m_aFullIDList = New Generic.List(Of Integer)
While i_oDataReader.Read
If i_oDataReader.IsDBNull(0) = False Then
m_aFullIDList.Add(i_oDataReader.GetInt32(0))
End If
End While
m_iTotalNumberOfRecords = m_aFullIDList.Count
End Sub
基本的に、このプロシージャはDataReaderをパラメータとして受け入れ、リーダー内のすべてのレコードをループして、整数の汎用リストに追加します。
リーダーの背後にあるSQLストアドプロシージャが比較的少量のレコード(100K未満)を返す場合、リーダーはすべてのレコードを読み取り、最終的なカウントは結果セットと一致します。しかし、レコード数が100万を超えると、結果は予測できなくなります。
たとえば、SPが150万件のレコードを返すことがわかっている場合、ジェネリックリストのレコードの最終的な数は200K、500Kなどになる可能性があります。
何が原因で、どのように修正するのか、何か考えはありますか?ありがとう!