Compartilhar via


System.Drawing OutOfMemoryException foi alterado para ExternalException

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+.

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: