Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El control de errores de GDI+ en System.Drawing se ha actualizado para iniciar ExternalException en lugar de OutOfMemoryException para Status.OutOfMemory errores.
Versión introducida
.NET 10
Comportamiento anterior
Anteriormente, cuando GDI+ encontró errores Status.OutOfMemory (a menudo debido a problemas de entrada no válidos en lugar de problemas reales de memoria), las APIs de System.Drawing generaron OutOfMemoryException.
Nuevo comportamiento
A partir de .NET 10, cuando GDI+ encuentra Status.OutOfMemory errores, las API de System.Drawing ahora inician ExternalException.
Tipo de cambio disruptivo
Se trata de un cambio de comportamiento.
Motivo del cambio
GDI+ no es especialmente bueno al devolver errores cuando no se pueden crear objetos internos. Hay muchos casos en los que se produce un error en la creación de objetos debido a una entrada no válida y el código de nivel superior obtiene un valor NULL y lo convierte en Status.OutOfMemory. Esto suele ser una fuente de confusión, ya que el error no suele estar relacionado con problemas de memoria reales.
El cambio a ExternalException proporciona informes de errores más precisos, ya que este tipo de excepción ya se produce en otras rutas de código System.Drawing para errores GDI+ similares.
Acción recomendada
Si el código detecta OutOfMemoryException al usar las API de System.Drawing, asegúrese de detectar ExternalException también para controlar estos errores de 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
Las APIs afectadas
Todas las API de System.Drawing que interactúan con GDI+ y que anteriormente podían producir OutOfMemoryExceptionStatus.OutOfMemory errores, entre las que se incluyen, entre otras:
- System.Drawing.Bitmap constructores y métodos
- System.Drawing.Graphics métodos
- System.Drawing.Image métodos
- System.Drawing.Icon constructores y métodos
- Otros tipos System.Drawing que usan GDI+ internamente