Udostępnij przez


System.Drawing OutOfMemoryException został zmieniony na ExternalException

Obsługa błędów GDI+ w elemecie System.Drawing została zaktualizowana, aby zgłaszać ExternalException błędy zamiast OutOfMemoryException błędów Status.OutOfMemory .

Wersja wprowadzona

.NET 10

Poprzednie zachowanie

Wcześniej, gdy interfejsy GDI+ napotkały Status.OutOfMemory błędy (często z powodu nieprawidłowych danych wejściowych, a nie rzeczywistych problemów z pamięcią), interfejsy API System.Drawing zwróciły wartość OutOfMemoryException.

Nowe zachowanie

Począwszy od platformy .NET 10, gdy interfejs GDI+ napotka Status.OutOfMemory błędy, interfejsy API rysunku System.Drawing zgłaszają teraz wartość ExternalException.

Typ zmiany przełamującej

Jest to zmiana behawioralna.

Przyczyna zmiany

Funkcja GDI+ nie jest szczególnie dobra w zwracaniu błędów, gdy nie jest w stanie utworzyć obiektów wewnętrznych. Istnieje wiele przypadków, w których tworzenie obiektu kończy się niepowodzeniem z powodu nieprawidłowych danych wejściowych, a kod wyższego poziomu pobiera wartość null i zamienia go w Status.OutOfMemorywartość . Jest to często źródło nieporozumień, ponieważ błąd często nie jest związany z rzeczywistymi problemami z pamięcią.

Zmiana w celu ExternalException zapewnia dokładniejszego raportowania błędów, ponieważ ten typ wyjątku jest już zgłaszany w innych ścieżkach kodu System.Drawing dla podobnych błędów GDI+.

Jeśli kod przechwytuje OutOfMemoryException się podczas korzystania z interfejsów API System.Drawing, upewnij się również, że przechwytujesz ExternalException te błędy 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

Interfejsy API, których dotyczy problem

Wszystkie interfejsy API System.Drawing, które współdziałają z interfejsem GDI+ i wcześniej mogły zgłaszać OutOfMemoryExceptionStatus.OutOfMemory błędy, w tym między innymi: