Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Oszczędzanie pamięci RAM


Rekomendowane odpowiedzi

Opublikowano

Cześć

Mam mały kłopot z użyciem pamięci RAM. Program który napisałem działał przez całą noc zużywając pamięć RAM, doszedł do 60% jej zapełnienia.
Pytanie brzmi jak poprawić program, aby ograniczył zużywanie pamięci?
akie są sposoby? 

Opublikowano

Napisać go w innym języku albo zoptymalizować kod 

Mózg to nie mydło; nie ubędzie Ci go, gdy go użyjesz.

Opublikowano

Czy jest możliwość automatycznego resetowanie działania programu? Jeżeli tak to by bardzo pomogło. Przy ponownym uruchomieniu programu pamięć RAM zostaje zwolniona i uniknąłbym stack overflow :)

Opublikowano

przeleć kod i pozamykaj wszelkie uchwyty, dopilnuj żeby zmienne znikały kiedy będą niepotrzebne, oraz żeby obiekty były usuwane po korzystaniu z nich, ogólnie musisz przelecieć cały kod i go poprawić.­

Jak pozamykać taki uchwyty ? 

Swój program opieram na kilku zmiennych, do których wczytuję raczej podobne rzeczy. 

Chcę poprawić swój kod, tylko potrzebuję nakierowania jak to można zrobić :)

 

 

A takie ogólne pytania:

Co program robi ?

Jakich technologii używa ?

Jakich bibliotek używa ?

Co ładuje do pamięci ?

Wczytuję stronę, wybiera odpowiednia akcję i wysyła POST/GET :)

Bibliotki: WinHTTP, array, string, własne stworzone z funkcjami akcji co ma robić.

do pamieci ładuję stronę, nastepnie wyszukuje i porównuję odpowiednie elementy. Na koniec wysyła POST z odpowiednią akcją.

Opublikowano

fragment programu:

 

;wymiana golda
func gold ()
$data = GETrequest('/trade/exchange')
$a=StringSplit($data,"block_zero",1)
$gold=_ArrayFindAll($a,"/exchange/silver/1",0,0,1,1)
If $gold <0 Then
   ConsoleWrite ("nie ma golda")
Else
   Do
$gold[0] >0
$gold=$gold[0]
$gold=$a [$gold]
$gold=_StringBetween($gold,"/exchange/silver/1?r=","'")
$gold=$gold[0]
$data=GETrequest('/trade/exchange/silver/1?r=' & $gold)
$data = GETrequest('/trade/exchange')
$a=StringSplit($data,"block_zero",1)
$gold=_ArrayFindAll($a,"/exchange/silver/1",0,0,1,1)
Until $gold <0
EndIf
EndFunc
Opublikowano
o k***a... pod żadnym pozorem nie korzystaj z jednej zmiennej do wszystkiego, bo najwyrażniej przez to w pamięci alokuje się cały czas miejsce dla nowych przy zmianie typu, a że AU3 nie ma garbage collectora to ten syf zostaje.­
846331404756772371599.jpeg
Opublikowano

o k***a... pod żadnym pozorem nie korzystaj z jednej zmiennej do wszystkiego, bo najwyrażniej przez to w pamięci alokuje się cały czas miejsce dla nowych przy zmianie typu, a że AU3 nie ma garbage collectora to ten syf zostaje.­

Właśnie na taką poradę czekałem:) 

Skoro już wiem co robię źle to zabieram się za poprawę. Dzięki za pomoc.

 

Jeżeli macie jakieś jeszcze pomysły jak polepszyć/ulepszyć to śmiało piszcie je :)

Opublikowano

Jak poprawię cały program to wrzucę i w tedy zobaczymy co da się jeszcze poprawić. Znając moje zamiłowanie do kombinowania, na pewno coś będzie i nie jedna o k***a poleci :D 

Opublikowano

Z doświadczenia wiem, że każdorazowe inicjowanie połączenia przez WinHTTP (open, connect) generuje overhead, który nie jest zwalniany.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...