Sdílet prostřednictvím


System.Drawing OutOfMemoryException se změnil na ExternalException

Zpracování chyb GDI+ v nástroji System.Drawing bylo aktualizováno tak, aby se místo chyb ExternalException zobrazovalo.OutOfMemoryExceptionStatus.OutOfMemory

Verze byla představena

.NET 10

Předchozí chování

Dříve, když rozhraní GDI+ narazilo Status.OutOfMemory na chyby (často kvůli neplatnému vstupu místo skutečných problémů s pamětí), API System.Drawing vyvolalo OutOfMemoryException.

Nové chování

Počínaje rozhraním .NET 10, když rozhraní GDI+ narazí Status.OutOfMemory na chyby, nyní vyvolá ExternalExceptionrozhraní System.Drawing API .

Typ zásadní změny

Jedná se o změnu chování.

Důvod změny

GDI+ není při vracení chyb obzvlášť dobrý, když není možné vytvářet interní objekty. Existuje mnoho případů, kdy vytvoření objektu selže kvůli neplatnému vstupu, a kód vyšší úrovně získá hodnotu null a převede ho na Status.OutOfMemory. To je často zdroj nejasnosti, protože chyba často nesouvisí se skutečnými problémy s pamětí.

Tato změna ExternalException poskytuje přesnější hlášení chyb, protože tento typ výjimky je již vyvolán v jiných cestách kódu System.Drawing pro podobné chyby GDI+ .

Pokud váš kód zachytí OutOfMemoryException při použití rozhraní System.Drawing API, nezapomeňte také zachytit ExternalException tyto chyby 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

Ovlivněná rozhraní API

Všechna rozhraní API System.Drawing, která komunikují s rozhraními GDI+ a dříve můžou vyvolat OutOfMemoryExceptionStatus.OutOfMemory chyby, včetně mimo jiné: