Je dois générer de grosses images volumineuses, quelque chose comme 15000x3000. Je génère ces images avec GDI +, classe Bitmap.Récupérer la mémoire contiguë disponible
Bien sûr, de temps en temps, la génération échouera car il n'y a plus de mémoire pour instancier le bitmap. Mon but est d'informer mon utilisateur de la taille maximale de l'image qu'il est autorisé à générer.
Le message devrait ressembler à:
Vous avez essayé de générer une image de taille 15000x3000, mais il n'y a pas assez de mémoire. La taille maximale disponible est 10000x3000 ou 15000x1000.
L'idée de créer le message est quelque chose comme ça:
public bool CanCreateBitmap(Size size, out string message)
{
long availableMemory = this.GetAvailableContiguousMemory();
long bytesRequiered = (long)size.Width * size.Height * 32;
if (availableMemory < bytesRequiered)
{
var sizeProposal1 = new Size(size.Width, (int)(availableMemory/(32 * size.Width)));
var sizeProposal2 = new Size((int)(availableMemory/(32 * size.Height)), size.Height);
message = string.Format("You tried to generate an image of size {0}, but there is not enough memory."
+ Environment.NewLine + "The maximum size available is {1}, or {2}."
, size, sizeProposal1, sizeProposal2);
return false;
}
else
{
message = "";
return true;
}
}
Mais je n'ai pas le code de la fonction GetAvailableContiguousMemory()
.
Existe-t-il une méthode pour récupérer la mémoire contigue dans .Net? Est-ce que je pose la bonne question pour atteindre mon objectif?
Peut-être que vous pourriez mettre le code de création bitmap dans un bloc try/catch et gérer l'exception de mémoire insuffisante si cela se produit? – dandan78
C'est déjà l'idée, mais le point principal ici est aussi de proposer quelque chose à l'utilisateur. Ils s'ennuient pour obtenir seulement un message "impossible de créer le bitmap" sans plus d'informations. –