ここは初めてのことであり、この問題を解決するのに苦労しています。非常に遅いですlista.items[i].remove
c#ListView.Items [i] .removeが非常に遅い
try
{
progressBar1.Maximum = lista.Items.Count;
lista.BeginUpdate();
for (int i = 0; lista.Items.Count > i; i++)
//for (int i = lista.Items.Count - 1; -1 < i; i--)
{
if (lista.Items[i].SubItems[1].Text.ToLower().Contains(Text) == false)
{
lista.Items[i].Remove();
}
progressBar1.Value = progressBar1.Value + 1;
}
lista.EndUpdate();
progressBar1.Value = 0;
}
catch (Exception errore)
{
txt_info.Text = "" + errore.Message;
progressBar1.Value = 0;
}
方法: は、私はこのコードの部分を持っています。 lista
はListView
で、50,000行以上のログファイルを作成しています。 処理を高速化する方法はありますか?
奇妙なことに、「lista.Items.RemoveAt(i)」のスピードは異なりますか?おそらく(直感的に反して)クラスは戻ってインデックス自体を解決しなければなりません。 – DonBoitnott
Forループ内でデータ構造体のサイズを変更しないでください(項目を削除する)。ループを削除せずにループを書き直してみてください。たとえば、forループで削除する必要のあるインデックスにフラグを立て、そのインデックスの外にそれらを削除します。 –
@RezaShirazian Oneは明らかに 'foreach'でそれをすることはできません...私は' for'を使って項目を削除することを合理的には信じています(結局、コードの一部はとにかくやらなければなりません)。上記のサンプルは削除されたアイテムの隣のアイテムをスキップするため)、悪い考えです。 –