Zarządzenie pamiecią i zmiennymi w LabView
: 30 lip 2009 20:54
Witam:),
mam pewien problem z aplikacją, którą właśnie rozbudowuję i niestety kompletnie nie wiem jak go rozwiązać, ani nawet gdzie dokładniej szukać rozwiązania.
Generalnie problem zdefiniowałbym jak zarządanie pamięcią i zmiennymi, a konkretnie ich usuwaniem. Pracuję nad dość dużej tablicy o wymiarach 64x64xok. 20000 liczb rzeczywistych (DBL), co teoretycznie daje ponad 80MB w pamięci. Jednak już po wczytaniu jej z pliku zużycie pamięci programie skacze o jakieś 300MB. To znacząco utrudnia pracę i tego dotyczą moje pytania:
1. Jeśli mam powyższą tablicę podłączam na wejście subVI, to czy program tworzy jej kopię i uruchamia subVI pracując na kopii, czy przekazuje adres i pracuje na tej samej zmiennej?
Powyższe pytanie wynika z faktu, że stworzyłem alternatywną wersję programu, która po odczytaniu przekazała całą tablicę do jednej kontroli i później przekazywałem wszędzie (również do subVI) tylko referencję do tej kontrolki, a już w samym subVI korzystając z Property Node odycztywałem wartości z tablicy. Niestety efekt wykorzystania pamięci był zbliżony. Czy zwykłe podłączenie zmiennej i przekazanie przez referencję czymś się różnią?
2. Troszkę poważniejszy problem. Mianowicie w subVI tworzona jest na podstawie tej tablicy inna tablica o zbliżonych rozmiarach, która następnie przekazywana jest na wykres. W trakcie wykonywania tego subVI drastycznie wzrasta użycie pamięci i niestety po jego zakończeniu nie spada, choć tablica jest przekazywana na wykres i więcej do niczego nie jest mi potrzebna. Czy istnieje jakiś sposób na zwolnienie obszaru pamięci zajmowanego przez tę tablicę wyjścią z subVI, po jej wyświetleniu na wykresie? Czy generalnie istnieje jakaś technika czyszczenia pamięci z danych nieużywanych już? Ewentualnie usuwania z pamięci wszystkich efektów działania danego subVI?
3. Na koniec mam jeszcze pytanie odnośnie Property Node oraz zmiennej lokalnej. Jaka jest różnica i jak lepiej odczytywać/zapisywać wartość do kontrolki, czy przez zmienną lokalną czy przez Property Node -> Value? Czym te dwa podejścia się różnią?
Z góry bardzo dziękuję za wszelkie odpowiedzi.
Serdecznie pozdrawiam
mam pewien problem z aplikacją, którą właśnie rozbudowuję i niestety kompletnie nie wiem jak go rozwiązać, ani nawet gdzie dokładniej szukać rozwiązania.
Generalnie problem zdefiniowałbym jak zarządanie pamięcią i zmiennymi, a konkretnie ich usuwaniem. Pracuję nad dość dużej tablicy o wymiarach 64x64xok. 20000 liczb rzeczywistych (DBL), co teoretycznie daje ponad 80MB w pamięci. Jednak już po wczytaniu jej z pliku zużycie pamięci programie skacze o jakieś 300MB. To znacząco utrudnia pracę i tego dotyczą moje pytania:
1. Jeśli mam powyższą tablicę podłączam na wejście subVI, to czy program tworzy jej kopię i uruchamia subVI pracując na kopii, czy przekazuje adres i pracuje na tej samej zmiennej?
Powyższe pytanie wynika z faktu, że stworzyłem alternatywną wersję programu, która po odczytaniu przekazała całą tablicę do jednej kontroli i później przekazywałem wszędzie (również do subVI) tylko referencję do tej kontrolki, a już w samym subVI korzystając z Property Node odycztywałem wartości z tablicy. Niestety efekt wykorzystania pamięci był zbliżony. Czy zwykłe podłączenie zmiennej i przekazanie przez referencję czymś się różnią?
2. Troszkę poważniejszy problem. Mianowicie w subVI tworzona jest na podstawie tej tablicy inna tablica o zbliżonych rozmiarach, która następnie przekazywana jest na wykres. W trakcie wykonywania tego subVI drastycznie wzrasta użycie pamięci i niestety po jego zakończeniu nie spada, choć tablica jest przekazywana na wykres i więcej do niczego nie jest mi potrzebna. Czy istnieje jakiś sposób na zwolnienie obszaru pamięci zajmowanego przez tę tablicę wyjścią z subVI, po jej wyświetleniu na wykresie? Czy generalnie istnieje jakaś technika czyszczenia pamięci z danych nieużywanych już? Ewentualnie usuwania z pamięci wszystkich efektów działania danego subVI?
3. Na koniec mam jeszcze pytanie odnośnie Property Node oraz zmiennej lokalnej. Jaka jest różnica i jak lepiej odczytywać/zapisywać wartość do kontrolki, czy przez zmienną lokalną czy przez Property Node -> Value? Czym te dwa podejścia się różnią?
Z góry bardzo dziękuję za wszelkie odpowiedzi.
Serdecznie pozdrawiam