Frage

Wir haben im Moment denken ein Cache-System der Gebäudedaten zu halten aus einer SQL-Datenbank gezogen und in ein paar anderen Anwendungen (Website, webservice, etc.) zur Verfügung zu stellen. Wir stellen wir die Cache als Windows-Dienst ausgeführt werden und im wesentlichen aus einem intelligenten Wörterbuch bestehen, die die Cache-Einträge enthalten. Meine Frage ist, gibt es eine Grenze für die Arbeitsseiten der Anwendung (es wird unter Windows Server 2003 ausgeführt werden)? Oder ist die Menge an physikalischem Speicher der Grenze?

War es hilfreich?

Lösung

32bit oder 64bit? 32bit ist 2 GB (für einen Prozess), 64 Bit 1 TB (Enterprise Edition 2003-Server) .

Allerdings ist die maximale Größe eines CLR-Objekt 2gb auch auf 64-Bit.

Update: die oben genannten Informationen korrekt war in 2008. Siehe Ohad Antwort für jüngere Information. Windows-2016-Server können maximal 24TB .

Andere Tipps

Ich habe vor kurzem um umfangreiche Profilspeichergrenzen in .NET auf einem 32-Bit-Prozess getan. Wir alle von der Idee bombardiert, dass wir (2 ^ 31) in einer .NET-Anwendung zu 2,4 GB zuweisen kann, aber leider ist dies nicht der Fall :(. Das Bewerbungsverfahren hat so viel Platz zu verwenden, und das Betriebssystem hat eine große Job es für uns die Verwaltung jedoch .NET selbst seine eigene Overhead zu haben scheint, die für etwa 600-800MB für typische reale Anwendungen Konten, die die Speichergrenze stoßen. das bedeutet, dass, sobald Sie ein Array von ganzen Zahlen zuordnen, die etwa nehmen 1,4 GB, sollten Sie eine OutOfMemoryException erwarten, um zu sehen ().

Offensichtlich in 64bit, diese Grenze Weise später eintritt (lassen Sie sich in 5 Jahren chatten :)), aber die allgemeine Größe alles im Speicher wächst auch (ich finde es ist ~ 1,7 bis ~ 2 mal) wegen der erhöhten Wortgröße .

Was ich sicher weiß ist, dass die Virtual Memory Idee vom Betriebssystem auf jeden Fall nicht Sie innerhalb eines Prozesses nahezu endlos Zuteilung Raum nicht geben. Es ist nur dort, so dass die volle 2.4GB an alle (viele) Anwendungen adressierbar ist zu einem Zeitpunkt ausgeführt wird.

Die folgende Tabelle von MSDN ist die genaueste Antwort auf Ihre Frage. Beachten Sie, dass die IMAGE_FILE_LARGE_ADDRESS_AWARE Flagge nicht direkt aus dem verwalteten Compiler eingestellt werden, wenn auch zum Glück kann es Post Build eingestellt wird über das Dienstprogramm Editbin . 4GT bezieht sich auf den / 3GB Flag.

alt text

Auf 32bit Windows Sie können ein bisschen mehr Speicher erhalten, indem Fenster mit dem / 3GB-Flag und das Markieren Ihrer App als „große Adresse bewusst“

Boote

Matthias,

Nicht wirklich eine Antwort auf die direkte Frage, aber eine andere Möglichkeit, dieses Problem zu nähern, die einige der großen Gefahren fortbewegen werden, die eine große Kopfschmerzen mit Caching-Lösungen sein kann. (Leider habe ich nicht empfehlen zu diesem Thema zu lesen.)

Wir führten dies in einem früheren Projekt, und es hat andere Probleme.

Für den Offline-Zugriff, können Sie SQL Express auf den Desktops ein Spiegel Ihrer Datenbank erstellen (oder nur das Bit Sie müssen Cache)? Dann alles, was Sie tun müssen, ist, schalten die Datenbank Ihrer Anwendung zeigt. Sie können es sogar speichern Diffs verwenden und diese an den Server wiederholen - auch wenn dies andere Probleme hat. Sie können die Berechtigungen für die lokale Kopie ändern, um dies zu machen schreibgeschützt, wenn das ist, wie es sein sollte.

Die Wörterbücher, die Sie denken Ton bemerkenswert wie SQL-Indizes zu erstellen. Ich würde auf SQL verlassen, um die Arbeit für Sie tun, wenn Sie können es Architekten auf diese Weise. Warum das Rad neu erfinden? Wenn Sie das tun, werden Sie sorgfältig über Cache-Ablauf und Speicherverwaltung denken -. Insbesondere, wenn dies ein Windows-Dienst ist

Viel Glück,

Sam

Wie bei jedem anderen Windows-Programm, werden Sie durch Adressraum begrenzt. Das heißt: auf 32-bit, mit 2 GB Adressraum haben kann. Auf x64, können Sie 8TB haben.

Wenn Sie nicht über 8 TB physischen Speicher haben, wird es auf Seite starten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top