Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O tratamento de erros GDI+ no System.Drawing foi atualizado para gerar ExternalException em vez de OutOfMemoryException para erros Status.OutOfMemory.
Versão introduzida
.NET 10
Comportamento anterior
Anteriormente, quando o GDI+ encontrava Status.OutOfMemory erros (muitas vezes devido à entrada inválida ao invés de problemas de memória reais), as APIs System.Drawing lançavam OutOfMemoryException.
Novo comportamento
A partir do .NET 10, quando o GDI+ encontra Status.OutOfMemory erros, as APIs de System.Drawing agora lançam ExternalException.
Tipo de mudança disruptiva
Essa é uma mudança comportamental.
Motivo da alteração
O GDI+ não é particularmente bom em retornar erros quando não é possível criar objetos internos. Há muitos casos em que a criação de objeto falha devido à entrada inválida e o código de nível superior obtém um nulo e o transforma em Status.OutOfMemory. Isso é frequentemente uma fonte de confusão, pois o erro geralmente não está relacionado a problemas reais de memória.
A alteração para ExternalException fornece relatórios de erros mais precisos, pois esse tipo de exceção já é lançado em outros caminhos de execução de código do System.Drawing para erros semelhantes do GDI+.
Ação recomendada
Se o seu código capturar OutOfMemoryException ao usar as APIs System.Drawing, certifique-se de também capturar ExternalException para lidar com esses erros 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
APIs afetadas
Todas as APIs System.Drawing que interagem com o GDI+ e anteriormente podiam gerar OutOfMemoryException para Status.OutOfMemory erros, incluindo, mas não se limitando a:
- System.Drawing.Bitmap construtores e métodos
- System.Drawing.Graphics Métodos
- System.Drawing.Image Métodos
- System.Drawing.Icon construtores e métodos
- Outros tipos de System.Drawing que usam GDI+ internamente