C# Out of Memory


Faller

Erfahrenes Mitglied
Mein Programm überschreitet geplant die 2GB Arbeitsspeicher Grenze nun würde ich aber gerne meinem Prozess auf 3 Gb Arbeitsspeicher erhöhen damit es seiner Aufgabe nachkommen kann.

Folgenden Link in der MSDN habe ich gefunden:

-http://msdn.microsoft.com/de-de/library/microsoft.visualstudio.vcprojectengine.vclinkertool.largeaddressaware%28v=vs.100%29.aspx

und
http://msdn.microsoft.com/de-de/library/microsoft.visualstudio.vcprojectengine.addressawarenesstype.aspx

leider hilft mir keines mit einem Tutorial weiter, gibt es jemanden der mir sagen kann wie die Code Zeile ausehen muss. Habe einige sinnvolle Möglichkeiten durch probiert aber nix funktionierte.

Vielleicht fehlt mir auch nur die Libery.

Auch folgender Link hieft mir nicht da ich nicht c++ programmiere.
http://msdn.microsoft.com/de-de/library/wz223b1z.aspx
Wo finde ich den Linker in einem C# projekt

Unter Projekt--> Projekt einstellungen finde ich es nicht.

Ich bin für jede Hilfe dankbar.
 

sheel

I love Asm
Hi

deine Links beziehen sich alle auf C/C++ (das ist etwas ganz Anderes).
Einen Linker gibt es in C# nicht.

Welches Betriebssystem hast du? 32/64bit?
 

Faller

Erfahrenes Mitglied
32 Bit ist mir bewust das die sich alle auf c++ beziehen aber kann man unter c# nicht dll dazulinken.
Habe bis jetze nur in c++ und java gearbeitet aber für dieses Projekt soll es c# sein.

Gibt es eine Möglichkeit die Prozess Arbeitspeicher in C# zu erhöhen
 

sheel

I love Asm
Und die Betriebssystemversion? XP? Win7? ...?

Für XP:
Du kannst versuchen, in der boot.ini /3GB dazuzuschreiben.
a) kann das aber Probleme machen
b) weiß ich nicht, ob .NET da mitmacht.

Und nicht probieren, /4GB oder /5GB zu nehmen, es gibt nur /3GB
Weiter als 3GB kommst du mit der 32bit-Version nicht.
 

deepthroat

Erfahrenes Mitglied
Hi.

Neben der /3GB Aktivierung muss die ausführbare Datei auch mit dem LargeAddressAware Flag markiert werden.

Das kann man mit dem editbin Tool bewerkstelligen.

Gruß
 

Faller

Erfahrenes Mitglied
Das mit der Boot ini habe ich schon versucht nur das vührt nicht zum erfolg.
Neben der /3GB Aktivierung muss die ausführbare Datei auch mit dem LargeAddressAware Flag markiert werden.

Das kann man mit dem editbin Tool bewerkstelligen.
Wäre es möglich mir zu erklären wie genau ich das mache also als Code.

über
Process.LargeAddressAware=true;
funktioniert es nicht
 

sheel

I love Asm
Und, nur falls es nicht klar ist:
Damit die boot.ini Wirkung zeigt muss der Computer neugestartet werden.

(führt schreibt man übrigens mit f).
 

Faller

Erfahrenes Mitglied
So nun für dijenigen die auch das selbe Problem haben eine Anleitung. Erstellt euer Programm als Release und kopiert die entstehende .exe Datei in c:\.

Xp
Nun klickt rechts auf den Arbeitplatz --> Eigenschaften --> Erweitert
Unter Start und wieder herstellung auf "Einstellungen" unter Startoptionen manuell bearbeiten bekommt ihr die Boot ini.
Hinter /fastdetect schreibt ihr /3GB und nun benutzt euer Rechner für Programme die dafür vorgesehen sind lange Adressen.

Windows 7 siehe Internet

Nun ruft ihr die eingabe aufforderung von Visual Studio auf unter start zu finden.
und gebt in die Konsole "editbin /largeadressaware c:\b.exe" ein.

Wenn ihr nun die exe startet und den rechner neu gestartet habt wird euer Programm 3 GB Arbeitspeicher benutzen.

MFG DER Faller und damit close
 

sheel

I love Asm
Ergänzend: Die boot.ini findet man auch als ganz normale Datei in C:\
(Vista&7 verwenden einen anderen Bootloader)
 
Zuletzt bearbeitet:

Benziner

Grünschnabel
Auch auf die Gefahr hin, dass das Thema schon zu alt ist, habe ich doch noch eine Frage dazu.
Und zwar würde mich interessieren, was passiert wenn ich das Programm, das nun mehr Arbeitsspeicher bekommen hat, auf einmal bei z.B. einem Kunde installiert werden soll.
Muss da dann extra auch noch die boot.ini verändert werden?
Oder gibt es vielleicht eine andere Möglichkeit das ganze zu automatisieren?