Mam problem dotyczący wydajności programu.
W programie po przyjściu wiadomości na port rs232 wyrysowuje odpowiednie wykresy. Wykresów jest kilka (zależy od wersji). Wszystko ma się rysować na bieżąco i robić jeszcze kilka innych rzeczy dlatego ważna jest wydajność. Robię to następująco: w momencie przyjścia na port danych następuje wykonanie na każdym z pictureBoxów metody BeginInvoke(funkcja,parametry) gdzie funkcja wykonuje odpowiednie malowania/usuwania zgodnie z parametrami. W kodzie obsługującym zdarzenie pojawienia się danej mam następujący fragment:
for (int i = 0; i < ilośc_PictureBoxów; i++)
PictureBox[i].BeginInvvoke(funkcja,parametry)
Tutaj moje pierwsze pytanie: czy można to zrobić lepiej - efektywniej już na tym poziomie ?
Może jakieś inne podejście wielowątkowe ? (Choć z tego co wiem używając BeginInvoke tworzy się
nowy wątek wykonujący daną funkcję). Aha - pod koniec programu wywala mi błąd apropos tego:
"Elementów Invoke lub BeginInvoke nie można wywołać w formancie do czasu utworzenia uchwytu okna"
Potem kwestia malowania(czyli to co jest robione w "funkcja"): robię to malując po pictureBoxie (CreateGraphics) oraz po bitmapie (Graphics.FromImage) tak, że normalnie się rysuje po PictureBoxie a jak sobie program wywoła invalidate to ciągnie Image tego pictureBoxa z bitmapy. No i znowu pytanie - czy da się zrobić lepiej to rysowanie (wszystko jest jak wiadomo real-time).
Będę wdzięczny za wszelką pomoc ! :)
PS. Tak zbudowana aplikacja patrząc na użycie procka wygląda tak że przez chwile jest ok 9%
potem zaś skacze do 20-30 potem znowu mniej i znowu 20-30 i tak w kółko. Jak przypuszczam wiąże
się to z jakimiś automatycznym procesami .NET ale pytanie brzmi jak się tego pozbyć żeby cały
czas mogło być 9% :)