List<T>
疑問に思っていたのですが、LINQクエリで述語を指定して削除するアイテムを見つけるなどの操作を行わずに、ジェネリックコレクション(私の場合は)から複数のアイテムを削除するエレガントな方法はありますか?
私は少しのバッチ処理を行っています。そこでは、処理する必要のあるオブジェクトタイプをでList<T>
埋めています。Record
この処理は、各オブジェクトがデータベースに挿入されることで終了します。リストを作成し、個々のメンバーをループして処理/挿入する代わりに、N
リソースをあまり消費しないため、リストのアイテムのグループを使用してトランザクションの一括挿入を実行したいと思います(ここで、は構成ファイルに入れることができるものをN
表します) BatchSize
、または同等のもの)。
私は次のようなことをしたいと思っています:
public void ProcessRecords()
{
// list of Records will be a collection of List<Record>
var listOfRecords = GetListOfRecordsFromDb( _connectionString );
var batchSize = Convert.ToInt32( ConfigurationManager.AppSettings["BatchSize"] );
do
{
var recordSubset = listOfRecords.Take(batchSize);
DoProcessingStuffThatHappensBeforeInsert( recordSubset );
InsertBatchOfRecords( recordSubset );
// now I want to remove the objects added to recordSubset from the original list
// the size of listOfRecords afterwards should be listOfRecords.Count - batchSize
} while( listOfRecords.Any() )
}
サブセットを繰り返し処理して次のような項目を削除するのではなく、これを一度に実行する方法を探しています。
foreach(Record rec in recordSubset)
{
if( listOfRecords.Contains(rec) )
{
listOfRecords.Remove(rec);
}
}
の使用を検討していましList.RemoveRange( batchSize )
たが、最初にStackOverflowのフィードバックを取得したいと思いました:) C#でのバッチ処理アルゴリズムの効率を最大化するためにどのような方法を使用しますか?
ヘルプ/提案/ヒントは大歓迎です!