0

私のwinformアプリケーションには、2つのデータテーブルがあり、両方に37000行が含まれています。表 1 には 171 列、表 2 には 4 列があります。While ループが実行され、4 列のテーブル 2 からテーブル 1 の値が更新されます。For ループが While 内で 2 回実行され、値が更新されます。これには 5 分以上かかります。これは5秒のタスクであるべきだと思います。

更新される列は次のとおりです。

Int64 - 1 列

文字列 - 1 列

ブール値 - 1 列

日付 - 1 列

誰かがこの問題の原因を教えてもらえますか?

        While lintRowCounter < ldtCurrentData.Rows.Count
            ldrCurrentDataRow = ldtCurrentData(lintRowCounter)
            For Each lobjDataEntity As DataEntities In lstDataEntities
                ldrCurrentDataRow(lobjDataEntity.SourceName) = ldtPositionData(lintRowCounter).Item(lobjDataEntity.SourceName)
                If ldtCurrentData.Columns.Contains(lobjDataEntity.SourceName + mstrFormulaColSuffix) Then
                    ldrCurrentDataRow(lobjDataEntity.SourceName + mstrFormulaColSuffix) = ldtPositionData(lintRowCounter).Item(lobjDataEntity.SourceName + mstrFormulaColSuffix)
                End If
                If ldtCurrentData.Columns.Contains(mstrSOFColPrefix + lobjDataEntity.SourceName) Then
                    ldrCurrentDataRow(mstrSOFColPrefix + lobjDataEntity.SourceName) = ldtPositionData(lintRowCounter).Item(mstrSOFColPrefix + lobjDataEntity.SourceName)
                End If
                If ldtCurrentData.Columns.Contains(lobjDataEntity.SourceName + mstrSourceDateColSuffix) Then
                    ldrCurrentDataRow(lobjDataEntity.SourceName + mstrSourceDateColSuffix) = ldtPositionData(lintRowCounter).Item(lobjDataEntity.SourceName + mstrSourceDateColSuffix)
                End If
            Next
            lintRowCounter += 1
        End While
4

2 に答える 2

3

すでに列名を知っているようですが、IF-CONTAINS を実行する代わりに直接参照しないのはなぜですか? そのように列名を確認するのはコストがかかるようです。また、このようなコードをmstrSOFColPrefix + lobjDataEntity.SourceName単一の変数に入れて、その文字列を何度も構築することを検討する必要があります。文字列連結は高価です。お役に立てれば!

于 2012-06-08T20:08:54.827 に答える
0

私が考えられる唯一のことは、更新をバッチ処理することです。(つまり、一度に 37,000 ではなく、一度に 2,000 を処理して、プログラムが過負荷にならないようにします。)

これを試してください: http://msdn.microsoft.com/en-us/library/kbbwt18a%28v=vs.80%29.aspx#Y0

またはこれ: http://msdn.microsoft.com/en-us/library/aadf8fk2​​%28v=vs.80%29.aspx

于 2012-06-08T18:59:06.667 に答える