Ograniczenie pamięci do 32mega

  • 5 Odpowiedzi
  • 2559 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline pajakgdynia

  • 17
  • Sprzęt: a925 / a639 / n560 / Xperia X1
Ograniczenie pamięci do 32mega
« dnia: Luty 07, 2010, 16:14:33 »
Trochę ostatnio walczę z Supermemo. Jak zauważyłem aplikacja jest bardzo pamięcio-wymagająca (w czasie importu garbage collector zwalnia koło 5mega/s, pamięć powoli rośnie w tempie ok 1mega/s). Import nie udaje się z powodu błędu alokacji pamięci (która dochodzi do 32mega)
Czy ktoś orientuje się, z czego wynika takie ograniczenie pamięci? Czy jest to .net czy samo WM? (testowałem na paru różnych PDA z różnym rozmiarem RAMu: 64/128/256, WM 6.0/6.1, .net 2.0). Czy ograniczenie to da się jakoś ominąć systemowo?
Czy w .net przypisywanie NULL dla "niepotrzebnej" pamięci powoduje przyspieszenie zwalniania pamięci GC? Czy może trzeba dane czytać do statycznej pamięci zamiast do alokowanej dynamicznie?

*

Offline tplewa

  • ****
  • 688
  • Płeć: Mężczyzna
  • Sprzęt: HTC Touch HD
Odp: Ograniczenie pamięci do 32mega
« Odpowiedź #1 dnia: Luty 07, 2010, 16:39:29 »
Tak jest to limit dla jednego procesu i tego nie obejdziesz, mozna to obchodzic robiac aplikacje dzialajaca jako kilka procesow + komunikacja miedzy nimi (ale to jest rzezba). Prawde mowiac radze zmienic koncepcje dzialania programu bo 32MB to mimo wszystko sporo jak na wiekszosc mobilnych aplikacji.

Odnosnie zarzadzania pamiecia w .NET proponuje poczytac np. to:
http://blogs.msdn.com/mikezintel/archive/2004/12/08/278153.aspx
"Two things are infinite: the universe and human stupidity; and I'm not sure about the universe."

*

Offline miba

  • *****
  • 4050
  • Płeć: Mężczyzna
  • Sprzęt: Toshiba G900, doszedł x51v
Odp: Ograniczenie pamięci do 32mega
« Odpowiedź #2 dnia: Luty 07, 2010, 22:36:15 »
Pisząc w c++ albo czymś co daje kod natywny można zmapować pliczek i sobie go jako pamięci na dane używać. Coś niby taki swap indywidualnie dla aplikacji. System nie wrzuci go do tych 32MB przestrzeni adresowej procesu, tylko do innego obszaru - tego 1GB o którym w artykuliku jest mowa. Ale w net to raczej odpada, przynajmniej w naturalny sposób robione.
Odnośnie tych przypisań null - raczej to nic nie da. O co chodzi z tym wczytaniem do pamięci statycznej? W systemach GC wszystko raczej jest dynamiczne ...

*

Offline tplewa

  • ****
  • 688
  • Płeć: Mężczyzna
  • Sprzęt: HTC Touch HD
Odp: Ograniczenie pamięci do 32mega
« Odpowiedź #3 dnia: Luty 07, 2010, 23:53:53 »
w sumie mozna kombinowac roznie, ale wydaje mi sie ze wystarczy zmienic podejscie. Prawde mowiac nie widze logicznego zastosowania aby wszystko upychac w pamieci :) Nawet jak chcemy cos dopalic aby zminimalizowac "wolny" odczyt z kart SD mozemy zrobic jakies inteligentniejszy cache w pamieci, ale to i tak nie upychanie wszystkiego na sile...

 
"Two things are infinite: the universe and human stupidity; and I'm not sure about the universe."

*

Offline pajakgdynia

  • 17
  • Sprzęt: a925 / a639 / n560 / Xperia X1
Odp: Ograniczenie pamięci do 32mega
« Odpowiedź #4 dnia: Luty 23, 2010, 22:34:30 »
jakby kogoś interesowało.. Bardzo dobry opis problemu jest na stronie:

http://www.codeproject.com/KB/mobile/VirtualMemory.aspx?msg=2869739

To powinien wiedzieć kazdy programista pod WM  :ohreally:

*

Offline miba

  • *****
  • 4050
  • Płeć: Mężczyzna
  • Sprzęt: Toshiba G900, doszedł x51v
Odp: Ograniczenie pamięci do 32mega
« Odpowiedź #5 dnia: Luty 24, 2010, 06:08:28 »
Niestety chyba jednak i każdy zaawansowany user powinien być świadomy, że WM wciska mu dll-ki w przestrzeń adresową procesów w tak bezsensowny sposób. :( XP też używa dll-ek które mają ten same fixup-y dla wszystkich aplikacji, ale nie w prywatnej przestrzeni VM procesu, tylko powyżej 2GB w standardowej konfiguracji systemu.