Przesiadam się stopniowo z Delphi na C# i nawet nieźle mi idzie, ale trafiłem na dwa problemy, które zdecydowanie nie leżą po stronie mojego kodu, a po stronie kiepskawej kontrolki ListView.
Co robię?
Wczytuję sobie plik binarny, w zależności od szczęścia (zapisywany w innym programie) mam w nim od 1 do ok. 3000 rekordów (to taka jakby baza danych). Samo wczytywanie rozpracowałem świetnie, jeśli nie sortuję nic, to wczytywanie pliku następuje w mgnieniu oka.
Problem z sortowaniem
Chcę, aby po załadowaniu posortowało elementy wg pierwszej kolumny (zwykłe dane liczbowe), idealnie zaraz po wczytaniu, zanim zawartość się wyświetli. Niby banał. Niestety po aktywacji Sorting --> Ascending w opcjach kontrolki cały proces trwa nawet 6 sekund. Pomyślałem sobie, że może te sortowanie to mega kiks i może wywołuje się po każdym dodaniu itema, albo coś. No to wyłączyłem to i w kod wrzuciłem:
ListView1.Sort();
Zaraz przed EndUpdate(), ale już po dodaniu wszystkich itemów, za pętlą, żeby czasami nie sortował co item. Niestety efekt identyczny - ListView mieli strasznie długo. I tu w porównaniu do ListView z Delphi jest katastrofa. W Delphi ta sama operacja - posortowanie listy wypełnionej uprzednio tymi samymi danymi - zajmowało poniżej 1s.
Problem z wyświetlaniem
Przy przewijaniu ListView całość miga i jest to dość irytujące. W Delphi miałem po prostu DoubleBuffered - True i po problemie. Tu nic takiego nie widzę, nie licząc cacheowania itemów, ale jak mam ubijać mrówkę za pomocą Uzi, to trochę się nie opłaca - nadmiar czasu na wyeliminowanie w sumie drobnego utrudnienia... (poza tym nie wiem, czy akurat Cache załatwiłoby problemy odrysowywania kontrolki - bo generalnie do tego sprowadza się problem z miganiem zawartości przy szybkim przewijaniu).
Czy istnieją jakieś umiarkowanie proste sposoby na załatwienie obydwu problemów? ;)
Jest jeszcze problem trzeci, ale to już jest związane nie z kontrolką a z typem danych, na których operuję, być może jak nic wujek google nie pomoże to założę nowy temat