這是我第一次在這裏,我正在努力解決這個問題。 我有這樣一段代碼: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.items[i].remove
是極爲緩慢。 lista
是一個ListView
,我正在處理大於50,000行的日誌文件。 無論如何加快這個過程?
好奇...... lista.Items.RemoveAt(i)'速度不同嗎?也許(與直覺相反),課堂必須回頭去解決索引本身。 – DonBoitnott
您不應在For循環中更改數據結構的大小(從中刪除項目)。嘗試重新編寫循環,而不刪除它。例如,標記需要在for循環中刪除的索引,然後將它們移出它們。 –
@RezaShirazian一個顯然不能用'foreach'來做......我認爲使用'for'來移除項目是合理的(最終某些代碼必須做到這一點) - 也明顯寫錯了上面的示例是由於跳過剛剛刪除的項目之後的項目)是不好的主意。 –