Y at-il une limite de mémoire pour un seul processus.NET




memory .net-3.5 (5)

Nous envisageons actuellement de construire un système de cache pour stocker les données extraites d'une base de données SQL et les mettre à la disposition de quelques autres applications (site web, service web, etc.). Nous imaginons que le cache fonctionne comme un service Windows et consiste essentiellement en un dictionnaire intelligent qui contient les entrées du cache. Ma question est, y at-il une limite à l'ensemble de travail de l'application (il sera exécuté sous Windows Server 2003)? Ou est la quantité de mémoire physique la limite?


Sur Windows 32 bits, vous pouvez obtenir un peu plus de mémoire en démarrant Windows avec l'indicateur / 3gb et en marquant votre application comme "grande adresse"


Matthias,

Pas vraiment une réponse à la question directe, mais une autre façon d'aborder ce problème qui permettra de contourner certains des grands pièges, ce qui peut être un casse-tête majeur avec des solutions de mise en cache. (Désolé je n'ai aucune lecture recommandée sur le sujet.)

Nous l'avons implémenté dans un projet précédent et cela a créé d'autres problèmes.

Pour un accès hors ligne, pouvez-vous utiliser sql express sur les bureaux pour créer un miroir de votre base de données (ou juste le bit dont vous avez besoin de mettre en cache)? Ensuite, tout ce que vous avez à faire est de changer la base de données vers laquelle pointe votre application. Vous pouvez même l'utiliser pour stocker des différences et les rejouer sur le serveur - même si cela a d'autres problèmes. Vous pouvez modifier les permissions sur la copie locale pour rendre celle-ci en lecture seule si c'est comme cela qu'elle devrait l'être.

Les dictionnaires que vous envisagez de créer sonne remarquablement comme les index Sql. Je compterais sur SQL pour faire le travail pour vous si vous pouvez l'architecturer de cette façon. Pourquoi réinventer cette roue? Si vous le faites, vous devrez réfléchir soigneusement à l'expiration du cache et à la gestion de la mémoire, en particulier s'il s'agit d'un service Windows.

Bonne chance,

Sam



Le tableau suivant de msdn.microsoft.com/en-us/library/… est la réponse la plus précise à votre requête. Notez que l'indicateur IMAGE_FILE_LARGE_ADDRESS_AWARE ne peut pas être défini directement à partir du compilateur géré, mais heureusement, il peut être défini après la génération via l'utilitaire editbin . 4GT fait référence au drapeau / 3gb.


Comme avec tout autre programme Windows, vous êtes limité par l'espace d'adressage. C'est à dire: sur 32 bits, vous pouvez avoir 2 Go d'espace d'adressage. Sur x64, vous pouvez avoir 8TB.

Si vous n'avez pas 8 To de mémoire physique, il commencera à paginer.





limit