1

私は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などになる可能性があります。

何が原因で、どのように修正するのか、何か考えはありますか?ありがとう!

4

1 に答える 1

1

このMSDNトピックで推奨されているように、を指定して渡すことができるExecuteReaderオーバーロードを使用すると役立つ場合があります。CommandBehaviorCommandBehavior.SequentialAccess

大きなデータの取得(ADO.NET)

于 2012-11-03T22:26:39.650 に答える