Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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+.
Zalecana akcja
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:
- System.Drawing.Bitmap konstruktory i metody
- System.Drawing.Graphics Metody
- System.Drawing.Image Metody
- System.Drawing.Icon konstruktory i metody
- Inne typy System.Drawing korzystające z interfejsu GDI+ wewnętrznie