Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Zwalnianie pamieci
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004
Zwalnianie pamieci

Witam

Pytanko jak zwolnić pamięć zajmowaną przez jakąś zmienną a tak w ogóle to jak zwolnić pamięć zajmowaną przez naszą aplikację?


Pozdrawiam.

[Post edytowany dnia 21-02-2005 21:22 przez DJK]


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

21-02-2005 21:13
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Może inaczej

Mam taką linię


Set Zmienna = New Collection

Dodaje sobie kilka pozycji do kolekcji a następnie wywołuję tą linię jeszcze raz.

I Pytanie czy pamięć zajmowana przez poprzednią kolekcję zostanie automatycznie zwolniona czy nie ??


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

22-02-2005 17:09
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Jesli nie ma żadnej innej zmiennej odnoszącej się do tej kolekcji - tak, zostaje zwolniona


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

23-02-2005 14:13
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Ok dzięki

Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

23-02-2005 17:18
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Ale dobrym nawykiem jest usuwanie obiektu np. przy pomocy Nothing:
Set zmienna = Nothing


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

23-02-2005 18:17
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

No tylko, że mój obiekt istnieje od początku do końca działania aplikacji także po wywołaniu Unload zostanie automatycznie usunięty


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

23-02-2005 18:27
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

No to jeśli istnieje od początku do końca.. to po co pytanie o stworzenie następnego?


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

23-02-2005 19:42
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Bo mam wrażenie (raczej na pewno tak jest) ze pamięć podczas projektowania nie jest zwalniana do momentu wyłączenia VB.

Prosty przykład:

Mam kontrolkę ListView, do której ładuję kilkaset a nawet kilka tysięcy pozycji. Następnie wszystkie usuwam znowu ładuję kilka tysięcy i tak kilkakrotnie - jak się okazuje w pewnym momencie wyskakuje komunikat, że jest za mało pamięci (zjawisko to zauważyłem pod 98, pod XP nie miałem okazji sprawdzić). Dodam, że kazda każdej pozycji odpowiada jakaś ikona systemowa.

Jeżeli pamięć byłaby zwalniana za każdym razem gdy wyczyszcę kontrolkę to komunikat nie miałby prawa pojawić się.

P.S. Oczywiście pomiędzy wyczyszczeniem a ponownym załadowanie pozycji daję pewien Intervał aby w razie gdy program korzystał z pamięci zadeklarowanej miał czas na jej wyczyszczenie.

No to tyle - dziwne zjawisko

Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

23-02-2005 20:03
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
bisiek




Typ: neutral
Postów: 487
Zarejestrowany: Jul 2003

Pod 98 też tak miałem, dlatego przeszedłem na xp i już nie mam takiego problemu.


_____________________________________________
www.mob.abc.pl - moja strona o VB

23-02-2005 22:18
Pokaż profil bisiek  Wyślij email do bisiek   Odwiedź stronę bisiek       3380672
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Też pracuję na Win98SE i nigdy niczego takiego nie zauważyłem, nawet przy seryjnym wypełnianiu pamieci dziesiątkami MB danych. Ale jeśli mówimy o takim przypadku, to nie mogę potwierdzić, że pamięć jest zwalniana. Na pewno jest zwalniana w teorii - tzn. zgodnie ze specyfikacją VB dostarczoną przez Microsoft. Natomiast może istnieć jakiś błąd w bibliotekach VB lub używanych kontrolkach, który powoduje, że nie są one kasowane i istnieją nadal nawet po zamknięciu samego programu.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

24-02-2005 03:43
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
busio
busio




Typ: neutral
Postów: 98
Zarejestrowany: Sep 2002
czysta prawda

Witam

Również jestem zdania że basic nie do końca tą pamięć czyści nawet jeśli w kodzie ustawimy na nothing. Osobiście wielokrotnie miałem sytuację ze aplikacja bazodanowa po kilkakrotnym załadowaniu rekordów do rekordseta i usunięciu ich (rekordseta również) wyświetlała komunikat Out of memory. Pomagał tylko reset kompa. Nawet awaryjne zwolnienie pamięci poprzez zamknięcie kilku innych aplikacji nie dawało zadnego skutku.... Podejrzewam, iż jest to błąd i nie jest to tylko moje zdanie.

Pozdrawiam busio

25-02-2005 17:18
Pokaż profil busio  Wyślij email do busio   Odwiedź stronę busio  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Postaram się jeszcze poszukać czegoś na ten temat, ale od razu należy zrobić jedno założenie: błąd "out of memory" może wogóle nie mieć nic wspólnego z pamięcią i szukamy nie tam gdzie trzeba.


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

26-02-2005 10:01
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Wszystkich odpowiedzi: 11 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1