Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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.
Rekommenderad åtgärd
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:
- System.Drawing.Bitmap konstruktorer och metoder
- System.Drawing.Graphics metoder
- System.Drawing.Image metoder
- System.Drawing.Icon konstruktorer och metoder
- Andra System.Drawing-typer som använder GDI+ internt