Delen via


System.Drawing OutOfMemoryException is gewijzigd in ExternalException

GDI+ foutafhandeling in System.Drawing is bijgewerkt om te genereren ExternalException in plaats van OutOfMemoryException voor Status.OutOfMemory fouten.

Geïntroduceerde versie

.NET 10

Vorig gedrag

Voorheen, wanneer GDI+ fouten aantrof Status.OutOfMemory (vaak vanwege ongeldige invoer in plaats van werkelijke geheugenproblemen), wierpen OutOfMemoryExceptionSystem.Drawing-API's.

Nieuw gedrag

Vanaf .NET 10, als GDI+ Status.OutOfMemory fouten tegenkomt, werpen de System.Drawing-API's nu ExternalException uit.

Type van brekende verandering

Dit is een gedragsverandering.

Reden voor wijziging

GDI+ is niet bijzonder goed bij het retourneren van fouten wanneer het geen interne objecten kan maken. Er zijn veel gevallen waarin het maken van objecten mislukt vanwege ongeldige invoer en code op een hoger niveau een null krijgt en verandert in Status.OutOfMemory. Dit is vaak een bron van verwarring, omdat de fout vaak niet is gerelateerd aan werkelijke geheugenproblemen.

De wijziging naar ExternalException zorgt voor nauwkeurigere rapportage van fouten, aangezien dit uitzonderingstype al wordt gegenereerd in andere codepaden van System.Drawing voor vergelijkbare GDI+-fouten.

Als uw code OutOfMemoryException opvangt bij het gebruik van System.Drawing-API's, zorg er dan voor dat u ook ExternalException opvangt om deze GDI+-fouten af te handelen.

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

Betreffende API's

Alle System.Drawing-API's die communiceren met GDI+ en die eerder OutOfMemoryException konden werpen voor Status.OutOfMemory fouten, waaronder maar niet beperkt tot: