Partilhar via


System.Drawing OutOfMemoryException alterado para ExternalException

O tratamento de erros GDI+ em System.Drawing foi atualizado para lançar ExternalException em vez de OutOfMemoryException erros Status.OutOfMemory .

Versão introduzida

.NET 10

Comportamento anterior

Anteriormente, quando o GDI+ encontrava erros Status.OutOfMemory (geralmente devido a entradas inválidas em vez de problemas reais de memória), as APIs System.Drawing lançavam OutOfMemoryException.

Novo comportamento

A partir do .NET 10, quando o Status.OutOfMemory GDI+ encontra erros, as APIs System.Drawing agora lançam ExternalExceptiono .

Tipo de mudança disruptiva

Trata-se de uma mudança de comportamento.

Motivo da mudança

O GDI+ não é particularmente bom em retornar erros quando não consegue criar objetos internos. Há muitos casos em que a criação de objetos falha devido a uma 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, uma vez que o erro muitas vezes 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 código System.Drawing para erros GDI+ semelhantes.

Se o seu código for capturado OutOfMemoryException ao usar APIs System.Drawing, certifique-se de também capturar ExternalException para lidar com esses erros 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 GDI+ e anteriormente podem gerar OutOfMemoryExceptionStatus.OutOfMemory erros, incluindo, mas não limitado a: