Wraz ze wzrostem ilosci elementów vectora spada prędkość wyświetlania listy

0

Hej ! :)
Doszedłem do pewnego momentu w programie i nie pasuje mi 1 rzecz:
Specjalnie zrobiłem tak, aby obliczenia dla każdej liczby elementów przy wyświetlaniu listy były takie same, aby prędkość była optymalna. Niestety coś mi nie wyszło. Wertuje kod już 666 raz i nie wiem o co biega.

Przedstawiam część kodu wraz z krótkim opisem:
http://pastebin.com/3LiJvg5G
Tutaj większa część kodu
http://pastebin.com/ABLVbtSn

  1. ScrollBar wysyła komunikat SBID_SUWAK (oznacza to, że _pos scrollbara zmienił się w stosunku do jego poprzedniej pozycji (nowa pozycja ScrollBara ustawia się autmatycznie) do procedury listy.
  2. Zdarzenie wędruje do wnętrza klasy przez udostępniony procedurze wskaźnik na funkcję Execute(), która obsługuje komunikaty zgodnie z przeznaczeniem. Tak więc wędrujemy do funkcji Proc_WM_COMMAND().
  3. Wewnątrz tejże funkcji wywoływana jest funkcja f_ListaDisplay(); i tu zaczynają się schody.
  4. Funkcja f_ListaDisplay(); wywołuje 3 funkcje po kolei:
    a) f_ListaDisplayHide();
  • Ukrywa ona elementy aktualnie wyświetlone na ekranie
    b) f_ListaDisplaySet();
  • Kasuje ona kontener wskaźników oraz zgodnie z pozycją ScrollBara uzupełnia go o nowe elementy.
    c) f_ListaDisplayShow();
  • Pokazuje nowe elementy na ekranie
  • Dodatkowo ustawia pozycje elementów

Nie mam pomysłu, w którym miejscu tracę na prędkości wykonania funkcji. Specjalnie stworzyłem oddzielny kontener na wyświetlane elementy, aby nie przeszukiwać całego kontenera wszystkich elementów. Staram się maksymalnie ograniczyć pętle. Nie wiem. macie jakieś pomysły?

W załączniku przesyłam skompilowany program. Klawiszem "delete" dodajecie element listy.

2

A możesz napisać po ludzku:

  1. Co robisz.
  2. Jaki jest efekt.
  3. Jakiego efektu się spodziewasz.
    ?
0

Zrobiłem coś jak ListBox. Przy większej ilości elementów niż może być wyświetlona w grę wchodzi ScrollBar. Działa on co prawda dobrze, niestety przy większej ilości elementów w vLista wyświetlanie staje się powolne hamując płynne ruchy Suwaka.

0

Może odpal po prostu profiler i będziesz widział co zjada czas. Bo powodów może być wiele, choćby to że wszędzie masz dostęp względem wskaźników więc data cache procesora u ciebie zupełnie leży.

0

Nie wiem jak Ci dziękować. Dla 800 elementów działa mi mega płynnie, dalej nie chciało mi się klikać :) To już mi całkowicie wystarczy. Miłego wieczoru wszystkim!

1 użytkowników online, w tym zalogowanych: 0, gości: 1