シリアル番号のリストがあり、これらの番号とIDに対応するデータテーブルから行を抽出する必要があります。私は同じのためにLINQクエリの下に使用しています:行を取得するためにlinq操作を最適化する方法
//list of serial numbers
var serialNumAlreadyExisted = [1,2,3];
var varID = 2;
//get the corresponding rows for these serial numbers
var duplicateRows = (from row in dt.AsEnumerable()
where row.Field<int>("ID") == varID &&
serialNumAlreadyExisted.Any(sr => sr == row.Field<string>("SERIAL_NUMBER"))
select row).ToList();
上記のコードは1-2K行に適していますが、50Kシリアル番号とDataTableの50Kレコードがある場合には多くの時間を要します。
これを最適化して処理時間を短縮する手段はありますか?
'serialNumAlreadyExisted.Contains(row.Field(" SERIAL_NUMBER "))'はどうですか? –
あなたは2つに参加することができます。それはおそらく私がやることですが、パフォーマンスの向上はメモリ内のセットで目立つものになるとは思っていません。実際には、メモリ内のすべてのものとの違いに気付いていることに私は非常に驚いています。 'DataTable'が熱心に読み込まれていることを覚えていませんか?最近は怠惰なバージョンがありますか?私は間違いなく、データの読み込みに時間がかかったと思っていますが、それは除外されていると思いますか? –
'DataTable.Select'メソッドを試してみてください。例えば(パフォーマンスをテストするハードコーディングされた例): 'DataRow [] dupes = dt.Select(String.Format(" Id = 2 AND SERIAL_NUMBER IN( '1'、 '2'、 '3') "));' – ASh