Autor Beitrag
will_lernen
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 02.04.09 18:10 
Ich soll ein Programm schreiben, dass das Arbeitsspeicher auslasten soll.

Ich habe es versucht mit einem Array der 100 000 000 Plätze lang ist. Damit werden 100 000 000 Plätze im Speicher mit 0 reserviert.

ausblenden C#-Quelltext
1:
2:
int[] myArray;
myArray = new int [100000000];


mehr geht's nicht.
Meine Frage ist warum es nicht mehr geht?
und wie mache ich das am besten, dass das gesamte Speicher für eine gewiesse Zeit belastet wird?

Danke im Voraus.

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 02.04.09 18:28 
Hallo und :welcome: !

Du kannst versuchen immer mehr Arbeitsspeicher zu reservieren, aber den gesamten geht ja nicht, denn ein Teil wird ja auf jeden Fall vom System benötigt. D.h. wenn du neuen anforderst, landet der alte reservierte Speicher schon in der Auslagerungsdatei auf der Festplatte.

Was hat das denn für einen Sinn? Das macht das System extrem langsam, und dann?
will_lernen Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Do 02.04.09 22:17 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Hallo und :welcome: !

Du kannst versuchen immer mehr Arbeitsspeicher zu reservieren, aber den gesamten geht ja nicht, denn ein Teil wird ja auf jeden Fall vom System benötigt. D.h. wenn du neuen anforderst, landet der alte reservierte Speicher schon in der Auslagerungsdatei auf der Festplatte.

Was hat das denn für einen Sinn? Das macht das System extrem langsam, und dann?

Es muss auch keinen Sinn haben. Das ist nur zum Testzweck.
Wenn ich das Programm, bzw. dieses Array 16 mal laufen lasse. d.h. die Eingabeaufforderungsfenster ist bei mir 16 mal geöffnet, dann Zeigt der Task Manager volle Belegung.
Ich will das aber in einer Programm machen unf nicht in 16.. )))
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Fr 03.04.09 10:21 
user profile iconwill_lernen hat folgendes geschrieben Zum zitierten Posting springen:
Meine Frage ist warum es nicht mehr geht?
"Nicht mehr gehen" heißt wohl, dass du sofort eine OutOfMemoryException bekommst. Du musst den Speicher sukzessive auslasten. Erstelle also immer mehr deiner Monster-Arrays und sammle sie z.B. in einer List<int[]>, bis die Exception kommt. Ohne die Liste würde der Garbage Collector spätestens[*] beim OOM die Arrays aufräumen.

[*]Wen's interessiert: Da die Arrays auf den Large Object Heap kommen, werden sie von einer gewöhnlichen Gen0-Collection nicht erfasst. imo ^^

_________________
>λ=
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 04.04.09 11:46 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
Wen's interessiert: Da die Arrays auf den Large Object Heap kommen, werden sie von einer gewöhnlichen Gen0-Collection nicht erfasst. imo ^^


Kannst Du das bitte für mich als Laien übersetzen? Ich bin bei diesem Thema Laie aber interessieren tut es mich schon.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 04.04.09 12:29 
user profile iconChristian R. hat folgendes geschrieben Zum zitierten Posting springen:
Kannst Du das bitte für mich als Laien übersetzen? Ich bin bei diesem Thema Laie aber interessieren tut es mich schon.
Anscheinend läuft es doch etwas anders ab, als ich in Erinnerung hatte, bevor ich mich also um Kopf und Kragen rede :zwinker: , verweise ich dich einfach auf das Buch, das ich wohl auch mal wieder lesen sollte: CLR via C#. Applied Microsoft .NET Framework 2.0 Programming. Ein absolute Muss, wenn man ein wenig hinter die Kulissen schauen will :D .

Einen schönen Artikel direkt über den Large Object Heap findest du hier: msdn.microsoft.com/e...gazine/cc534993.aspx
Objekte > 85KB kommen also auf einen eigenen Heap, aber bei obigen Riesen-Arrays würde wahrscheinlich schon das allererste eine Full Collection hervorrufen. Die Arrays müssten also auf jeden Fall in einer Liste zwischengespeichert werden, sonst sind sie sofort wieder weg.

_________________
>λ=