Witam. pisze oprogramowanie do wyświetlania danych na wykresie. Dane pobieram z pliku binarnego a nastepnie wyświetlam je na wykresie. wszystko działa tylko że danych jest bardzo dużo i samo wyświetlanie trwa troche czasu. Czy istnieje jakaś metoda aby ten czas jakoś skrócić?
Zbyt ogólnie przedstawione pytanie by dało się cokolwiek odpowiedzieć.
albo wyswietlac mniej danych (przed wyswietlaniem). Pogrupowac, usunac jakies ktore sa nadmiarowe
w petlach for wybieram odpowiednie dane z pliku binarnego następnie przeliczam i probuje wyswietlic na wykresie. jest ok 900k probek do wyswietlenia. zajmuje to jednak toche czasu i tutaj jest moje pytanie czy mozna to jakos przyspieszyc
`` for (int i = dl_paczki_poczatkowej*dl_paczki; i < dl_pliku_bajt; i += dl_paczki){
for (int k = i + dl_licznika_paczki; k < i + dl_paczki; k += dl_ramki){
for (int j = k, l = 0 ; j < k + dl_ramki, l < dl_ramki; j++, l++){
ramka[l] = bufor[j];
}
bufor_kanal1[n] = ((400 * (Convert::ToSingle(ramka[4] & 0x03FF) - 512)) / 1024);
bufor_kanal2[n] = ((2 * (Convert::ToSingle(ramka[5] & 0x03FF) - 512)) / 1024);
bufor_kanal3[n] = ((2 * (Convert::ToSingle(ramka[6] & 0x03FF) - 512)) / 1024);
bufor_kanal4[n] = ((10 * (Convert::ToSingle(ramka[7] & 0x03FF) - 512)) / 1024);
bufor_czas[n] = Convert::ToSingle((ramka[1] * 65536 + ramka[0]) & 0x003FFFFF) / 10000;
this->chart1->Series["wykres"]->Points->AddXY(bufor_czas[n], bufor_kanal1[n]);
this->chart1->Series["wykres1"]->Points->AddXY(bufor_czas[n],bufor_kanal2[n]);
n++;
}
}``
w petlach for wybieram odpowiednie dane z pliku binarnego następnie przeliczam i probuje wyswietlic na wykresie. jest ok 900k probek do wyswietlenia. zajmuje to jednak toche czasu i tutaj jest moje pytanie czy mozna to jakos przyspieszyc
for (int i = dl_paczki_poczatkowej*dl_paczki; i < dl_pliku_bajt; i += dl_paczki){
for (int k = i + dl_licznika_paczki; k < i + dl_paczki; k += dl_ramki){
for (int j = k, l = 0 ; j < k + dl_ramki, l < dl_ramki; j++, l++){
ramka[l] = bufor[j];
}
bufor_kanal1[n] = ((400 * (Convert::ToSingle(ramka[4] & 0x03FF) - 512)) / 1024);
bufor_kanal2[n] = ((2 * (Convert::ToSingle(ramka[5] & 0x03FF) - 512)) / 1024);
bufor_kanal3[n] = ((2 * (Convert::ToSingle(ramka[6] & 0x03FF) - 512)) / 1024);
bufor_kanal4[n] = ((10 * (Convert::ToSingle(ramka[7] & 0x03FF) - 512)) / 1024);
bufor_czas[n] = Convert::ToSingle((ramka[1] * 65536 + ramka[0]) & 0x003FFFFF) / 10000;
this->chart1->Series["wykres"]->Points->AddXY(bufor_czas[n], bufor_kanal1[n]);
this->chart1->Series["wykres1"]->Points->AddXY(bufor_czas[n],bufor_kanal2[n]);
n++;
}
}
zrobilem takie cos w liceum :) w delphi 3
przy 900k probkach to nic dziwnego ze Ci wolno dziala
sprobuj
FastLine albo FastPoint.
Tez mozesz sprobowac usunac tooltip
https://social.msdn.microsoft.com/Forums/en-US/906e0778-4cc4-4460-8079-f43c428c729a/ecg-chart-performance-problem?forum=MSWinWebChart
(szkoda ze nie napisales co to za framework i jakiego typu jest ten chart)
Wlasnie mam wybrany fastline. A plik binarny jest zapisany ramkami udp. Ja po prostu z odpowiednich pól wybieram probki czasu i napiecia
Chyba bez decymacji lub obcięcia pliku się nie obejdzie. A mam jeszcze jedno pytanie... korzystam z komputera z zintegrowaną kartą graficzna, i jak wrzucam dane na wykres to w menedżerze zadań widać jak rośnie rozmiar pamięci zajmowanej przez program. Czy jak wrzucę aplikacje na komputer z dedykowaną kartą graficzną to aplikacja rozdzieli dane na pamięć karty graficznej ??