여기 처음으로이 문제를 해결하기 위해 애 쓰고 있습니다.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 '를 사용하는 것이 합리적이라고 믿는다. (마침내 코드 일부는 어쨌든 그것을해야한다.) 또한 분명히 잘못 쓰여진다. 위의 예제는 제거한 항목 옆에있는 항목을 건너 뛰기 때문에) 나쁜 생각입니다. –