リストからすべてのアイテムをすばやく取得する方法を探しています。このリストには時間値が含まれており、特定の時間より前にすべてが必要です。 明らかに、注文されたリストは簡単でなければなりません。あなたが定義したものよりも高い値でリスト内の1つのアイテムを見つけたら、それは止めることができます。(ソートされたリストで)より高い値が見つかるまで、あらゆる種類のコレクションをすばやく検索する
私は高速であると主張しているが、ある時点までのすべての時間を見つけるための良い方法はありません。
私はこの方法(良いと速いもの)を作る方法を知っていましたが、最良の方法が何であるか分かりません。それを使用するための最良の方法はされていない、次のように私は現在、このキューを使用しています
(私が思うだろう):
while (mDisposing == false)
{
if (this.mIdleChoresRunning == true)
{
try
{
if ((mIdleChoreQueue.First != null) && (Timing.IsTimeOutByTicksNow(mIdleChoreQueue.First.AddTime, mIdleChoreQueue.First.WaitTime)))
{
//var item = mIdleChoreQueue.Dequeue();
var chore = mIdleChores[mIdleChoreQueue.First.IdleChoreIdentification];
mIdleChoreQueue.First.AddTime = Environment.TickCount;
mIdleChoreQueue.First.WaitTime = chore.IdleMiliSeconds;
mTaskQueue.EnqueueTask(() =>
//Task.Factory.StartNew(() =>
{
chore.Execute(mIdleChoreQueue.First.Context);
});
mIdleChoreQueue.UpdatePriority(mIdleChoreQueue.First, mIdleChoreQueue.First.AddTime + mIdleChoreQueue.First.WaitTime);
}
else
{
Thread.Sleep(10);
}
}
catch (Exception exception)
{
mLogger.Error("ExecuteIdleChores() EXCEPTION", exception);
}
}
else
{
Thread.Sleep(100);
}
}
は、私は、コレクションの種類を気にしない明確にするために、すべてのI .Where()操作は本当に遅いですので
mIdleChoreList.Where(x => Timing.IsTimeOutByTicksNow(x.AddTime, x.WaitTime));
:希望は、より私の項目を取得(およびそれらを実行する)ためのより高速な方法です。
[バイナリ検索ツリー](https://en.wikipedia.org/wiki/Binary_search_tree)に最適です。 – itsme86
'mIdleChoreList'とは何ですか?既に注文されているもの? –
私は、データ構造(この場合は操作の追加/削除も考慮する必要があります)を探しているのか、既に1つしかありません(順序付けされている)だけで効果的な検索を探しているのかどうかは疑問です。 –