0

次のコードがあります。

var docs = ctx.Documents.Select(a => 
    new { a.ID, Content = a.Document, a.LastModified, CreatedDate = a.Created });

foreach (var doc in docs)
{
    if (Utility.ContinueDocumentPreview)
    {
        _createFile(doc.ID, doc.Content, doc.CreatedDate, doc.LastModified);
        _fireProgress(++counter, count);
    }
    else
    {
        break;
    }
}

このプロセスの実行中にユーザーが [キャンセル] ボタンをクリックすると、Utility.ContinueDocumentPreview フラグが false に設定されます。問題は、フラグが false で、コードがループから抜け出す必要がある場合です。SQL タイムアウト例外が発生します。

私はこれを間違ってやっていますか?

4

1 に答える 1

0

ループする前にSQLを実行するために使用できますが、データベースから取得するデータの量によって異なります。一度に大きなSQLクエリが発生する可能性があるため、多くのテストを行って、希望するパフォーマンスが得られていることを確認してください。.ToList

// You can add .ToList() here:
var docs = ctx.Documents.Select(a => new { a.ID, Content = a.Document, a.LastModified, CreatedDate = a.Created }).ToList();

// Or, you can add .ToList() here:
foreach (var doc in docs.ToList())
{
    if (Utility.ContinueDocumentPreview)
    {
        _createFile(doc.ID, doc.Content, doc.CreatedDate, doc.LastModified);
        _fireProgress(++counter, count);
    }
    else
    {
        break;
    }
}
于 2012-10-01T17:13:51.660 に答える