outOfMemoryException

0

Napisałem program który wczytuje duże binarne pliki (max 200 MB) i wyciąga z nich pewne informacje i wrzuca do obiektu listbox. Program działa dobrze dla plików do 50 MB powyżej wyskakuje outOfMemoryException. Podejrzałem w taskmanager że wysypuje się gdy zajmie ok. 100MB
Przecież to wcale nie jest dużo ?
Co mogę zrobić zeby móc zaalokować więcej pamięci (do 300-400 MB) ?

0

A musisz wrzucac cale pliki do pamieci? Nie wystarczy ich przegladnac? Ladowanie 200MB pliku do pamieci w calosci to jest duzo.

0

masz racje, nie jest to efektywnie napisane w tym momencie
wiec bede potrzebował troche mniej ale i tak dużo !
interesuje mnie czemu nie moge zaalokowac wiecej niz 100 MB, bo to naprawde bardzo mało

0
Róman napisał(a)

Program działa dobrze dla plików do 50 MB powyżej wyskakuje outOfMemoryException. Podejrzałem w taskmanager że wysypuje się gdy zajmie ok. 100MB
Przecież to wcale nie jest dużo ?

To jest dużo, wnioskuje ze masz 1,5GB lub 2GB pamięci skoro ci sie sypie powyżej 50mb. Ja ladowalem max pliki okolo 100mb i miałem outOfMemoryException i do tego komunikat z Windowsa coś w tym stylu Brak Pamieći :-[

Róman napisał(a)

i wyciąga z nich pewne informacje i wrzuca do obiektu listbox.

Napisz co chcesz wyciągnąć może zrobisz to bez wrzucania w pamięć.

pozdrawiam

0

Zamiast z pamięci czytaj i sprawdzaj prosto z pliku. Modyfikacji wiele nie będzie. Albo wrzucaj do pamięci plik kawałkami.

0

ok, nie ma problemu z taka przeróbka zebym wczytywał po kawałku i wrzucał do listbox czy richedit
ale i tak tych danych które muszą być wyświetlone w jednym momencie bedzie dużo
mam 1,5 gb ramu + 1,5 wirtualnej

myślałem ze jest jakis sposób na obejscie tego? W c++ spokojnie moge zaalokować więcej (aż do zapchania całej pamięci)

0

To trzeba wczytywać tylko to co jest aktualnie wyświetlane. To ci się powinno przydać:
Displaying large amount of data in DataGridView
Virtual Mode in the Windows Forms DataGridView Control

0

ok poprawiłem wczytywanie i na razie działa w tej postaci jednak zawsze moze sie trafic plik przy którym sie wysypie

sytuacja o której pisałem zdarzała sie mimo ze miałem jeszcze mnóstwo wolnej pamieci np. zajete 700 mb na jakies ~3300 całości

wciąż dziwi mnie ze nie moge wiecej wrzucic do pamieci, w c++ mogłem dojśc do sytuacji z system wyswietlał komunikat "za mało pamieci.." tu sie nie da :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1