Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA Excel - Pętlowe zapisywanie danych - zużycie ramu

rychu888 02 Lip 2013 20:23 1881 5
  • #1 02 Lip 2013 20:23
    rychu888
    Poziom 11  

    Witam,

    pracuję nad makrem które sukcesywnie będzie zczytywać odpowiednie dane z sieci WEB i wszystkie je zapisywać.

    Udało mi się już zmusić excel do automatycznego zczytywania danych co minutę.

    Problem polega na tym, iż taki plik coraz bardziej zużywa RAM.

    W związku z czym mam pytanie jak poradzić sobie z tym problemem?
    1)Czy można włączyć excel który będzie działał jako "pusty" plik i nadpisywał co minutę jakiś plik na dysku (np. tekstowy rozdzielony średnikami)? Jeśli się tak da to byłaby najlepsza opcja, tylko jak to zrobić?
    2)Czy rozwiąże problem zapisywanie działającego pliku excel np co 24 h ?

    Dane planuję zczytywać 24/7 co minutę. Potrzebuję danych bez przerwy co najmniej dla okresu 2 miesięcy dlatego najpierw muszę napisać dobre makro :).

    Z góry dzięki za pomoc.

    Pozdrawiam,
    Rysiek

    P.S.
    Robiąc makro które zczytuje dane co minutę posiłkowałem się:
    Zczytywanie danych z WEB: https://www.elektroda.pl/rtvforum/topic2362695.html
    Pętla czasowa: http://www.youtube.com/watch?v=8bi5N2Gmd4k

    0 5
  • #2 02 Lip 2013 20:44
    marcinj12
    Poziom 40  

    Cóż, osobiście uważam, że Excel i VBA nie będzie do tego dobrym rozwiązaniem... VBA to taki trochę dodatek do kożucha, jakim jest Excel czy Access - niby jakiś język programowania, ale nie on był głównym celem twórców. Ściągnie danych z sieci web za pomocą kwerendy to taka trochę czarna skrzynka - niby działa, ale nie bardzo wiadomo co się dzieje i czy nie ma np. jakiejś dziury powodującej wyciek pamięci. Nie ma żadnej gwarancji że po jakimś czasie Excel się nie zwiesi i nie zamknie sam z siebie, jak to mu się czasem zdarza.

    Przyznam szczerze że nigdy nie próbowałem zrobić makra działającego co minutę przez 2 miesiące, do takich rzeczy są inne, lepiej pasujące języki. Jeśli jesteś zaznajomiony ze składnią Basica, chociażby VB.NET z pakietu Visual Studio Express moim zdaniem lepiej spełni tą rolę, też ma elementy do pracy z siecią, choć stronę pewnie będzie trzeba parsować ręcznie.

    Dane możesz zapisywać do bazy danych albo dopisywać do pliku .txt, zależy jak dużo ich ma być.

    0
  • #3 02 Lip 2013 20:59
    adamas_nt
    Moderator Programowanie

    marcinj12 napisał:
    uważam, że Excel i VBA nie będzie do tego dobrym rozwiązaniem
    Zgadzam się i uważam, że Excel "nie wytrzyma" działania makra w opisany sposób nawet 2-3 dni...

    marcinj12 napisał:
    Ściągnie danych z sieci web za pomocą kwerendy to taka trochę czarna skrzynka - niby działa, ale nie bardzo wiadomo co się dzieje
    A tu się nie zgadzam ;)

    0
  • #4 02 Lip 2013 21:11
    marcinj12
    Poziom 40  

    adamas_nt napisał:
    A tu się nie zgadzam :wink:
    Miałem na myśli, że nie do końca wiadomo (a przynajmniej ja nie wiem ;)) co się dzieje w czasie pobierania tych danych: z jakich mechanizmów czy bibliotek Excel korzysta? Jak "obchodzi się" z połączeniem? Jakie zasoby rezerwuje i kiedy je zwalnia?
    Funkcje te zdają się być zaszyte głęboko przez programistów, użytkownikowi wystawiając jedynie prosty kreator - a na pewno głębiej, niż ma to miejsce w takim .NET gdzie można samemu wszystko prześledzić, zdebugować czy podejrzeć :) Teraz w Excelu Kolega ma problem z rosnącym zużyciem pamięci... i tak naprawdę żadnego narzędzia do ustalenia dlaczego tak się dzieje.

    Być może makro takie jak Kolega chce to zrobić zadziała, nie można tego wykluczyć - można spróbować i się przekonać...

    0
  • #5 02 Lip 2013 21:34
    rychu888
    Poziom 11  

    Nie uważam excela za cud do programowania, ale co by dużo nie mówić jego makra są bardzo user friendly ;).

    Napisane makro działało 12 h (po czym sam je wyłączyłem). Zużycie ramu przez ten czas wzrosło o ok. 0,5 GB więc łatwo policzyć że 4 GB osiągnię po niecałych 4 dniach, co wtedy nie wiem :D, wole te 4 dni przeznaczyć na wymyślenie jak to zmienić niż zauważyć, że o wyłączyło się wszystko...

    Więc jak ktoś może pomóc w rozwiązaniu problemu w excelu to z góry dzięki. Na tą chwilę chcę sprawdzić czy na pewno nie uda się excelem - nauka prawdziwego programowania zajmie trochę za dużo czasu którego jak zwykle brak :/.

    Pozdrawiam,
    Rysiek

    0
  • #6 02 Lip 2013 22:04
    adamas_nt
    Moderator Programowanie

    rychu888 napisał:
    Zużycie ramu przez ten czas wzrosło o ok. 0,5 GB
    Czy usuwasz kwerendę/y po każdym add, refresh? Jeśli nie, to policz ile ich jest w skoroszycie. Np poleceniem
    Kod: vb
    Zaloguj się, aby zobaczyć kod
    Może to jest przyczyną "połykania" RAM'u...

    0