時間プロパティを含む「アイテム」オブジェクトのコレクションを検索する必要があります。私は迅速な解決策を用意していますが、非常に面倒です(何も改善されない場合は投稿します)。以下は、LINQ などを使用して自分で検索を実行しようとした私の試みです。
私の特定のケースでは、アイテムが時間に基づいて低から高に注文されていることがわかっています。それらを繰り返すと、9/12、9/13、9/14 です。これが注文されていなくても速い解決策を見つけたいのですが、今は重要ではありません。
//ICollection c = GetCollection(); //25,000+ items
DateTime TIME = DateTime.Now.AddDays(-1);
EventLog scan = new EventLog("Application", "Server", "N/A");
EventLogCollection c = scan.Entries;
Console.WriteLine(logs.Count); // All entries already in list here
// 64 sec - SLOW
List<Item> l1 = new List<Item>();
foreach (Item i in c) {
if (i.time > TIME) {
l1.Add(i); }
}
// 93 sec - SLOWER
var l2 = c.Cast<Item>().AsParallel().Select(n => n.time > TIME);
var i = l2.Count();
// 98 sec - EVEN SLOWER!
List<Item> l3 = new List<Item>();
Parallel.ForEach(c.Cast<Item>(), n => {
if (n.time > TIME) {
l3.add(n);
}
});
私の現在の解決策は、開始時間と終了時間の BinarySearch を実行し、それらのインデックスに基づいて ICollection をループすることです。非常に高速(1〜2秒)ですが、非常に面倒です。別のソリューションは必要ありませんが、パフォーマンスの専門家にこれを投げたいと思いました。
ICollection を検索するためのより高速でエレガントな方法はありますか? ところで、与えられたコレクションを制御することはできず、その構造を変更することはできません。.NET 4.0
いいえ、Windows XP で立ち往生しているため、System.Diagnostics.Eventing.Reader を使用できません。