Partager via


System.Drawing OutOfMemoryException a changé en ExternalException

La gestion des erreurs GDI+ dans System.Drawing a été mise à jour pour lever ExternalException au lieu de OutOfMemoryException pour les erreurs Status.OutOfMemory.

Version introduite

.NET 10

Comportement précédent

Précédemment, lorsque GDI+ a rencontré des Status.OutOfMemory erreurs (souvent en raison d’une entrée non valide plutôt que de problèmes de mémoire réels), les API System.Drawing ont levé OutOfMemoryException.

Nouveau comportement

À partir de .NET 10, lorsque GDI+ rencontre des erreurs, les API System.Drawing lèvent maintenant Status.OutOfMemory.

Type de changement cassant

Il s’agit d’un changement comportemental.

Raison de la modification

GDI+ n’est pas particulièrement performant à retourner des erreurs lorsqu’il n’est pas en mesure de créer des objets internes. Il existe de nombreux cas où la création d’objets échoue en raison d’une entrée non valide, et le code de niveau supérieur obtient une valeur Null et le transforme en Status.OutOfMemory. Il s’agit souvent d’une source de confusion, car l’erreur n’est souvent pas liée aux problèmes de mémoire réels.

La modification de ExternalException fournit des rapports d’erreurs plus précis, car ce type d’exception est déjà levé dans d’autres chemins de code System.Drawing pour des erreurs GDI+ similaires.

Si votre code intercepte OutOfMemoryException lors de l’utilisation des API System.Drawing, veillez à intercepter également ExternalException pour gérer ces erreurs GDI+.

try
{
    // System.Drawing operations
}
catch (ExternalException ex)
{
    // Handle GDI+ errors (including former OutOfMemoryException cases)
}
catch (OutOfMemoryException ex)
{
    // Handle actual memory issues
}
Try
    ' System.Drawing operations
Catch ex As ExternalException
    ' Handle GDI+ errors (including former OutOfMemoryException cases)
Catch ex As OutOfMemoryException
    ' Handle actual memory issues
End Try

API affectées

Toutes les API de System.Drawing qui interagissaient avec GDI+ et pouvaient auparavant provoquer des erreurs OutOfMemoryException pour Status.OutOfMemory, y compris, mais sans s'y limiter :