System.Drawing OutOfMemoryException har ändrats till ExternalException

GDI+ felhantering i System.Drawing har uppdaterats för att genereras ExternalException i stället OutOfMemoryException för för fel Status.OutOfMemory .

Version lanserad

.NET 10

Tidigare beteende

Tidigare när GDI+ påträffadeStatus.OutOfMemory fel (ofta på grund av ogiltiga indata snarare än faktiska minnesproblem), kastade OutOfMemoryException System.Drawing API:er.

Nytt beteende

Från och med .NET 10, när GDI+ stöter Status.OutOfMemory på fel, genererar ExternalExceptionSystem.Drawing API:er nu .

Typ av brytande ändring

Det här är en beteendeförändring.

Orsak till ändring

GDI+ är inte särskilt bra på att returnera fel när det inte går att skapa interna objekt. Det finns många fall där det inte går att skapa objekt på grund av ogiltiga indata, och kod på högre nivå får en null och omvandlar den till Status.OutOfMemory. Detta är ofta en källa till förvirring eftersom felet ofta inte är relaterat till faktiska minnesproblem.

Ändringen ger ExternalException mer exakt felrapportering eftersom den här undantagstypen redan genereras i andra System.Drawing-kodsökvägar för liknande GDI+-fel.

Om koden fångas OutOfMemoryException när du använder System.Drawing-API:er kontrollerar du att du också fångar ExternalException upp för att hantera dessa GDI+-fel.

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

Berörda API:er

Alla System.Drawing-API:er som interagerar med GDI+ och tidigare kan utlösas OutOfMemoryException för Status.OutOfMemory fel, inklusive men inte begränsat till: