CORRECÇÃO: Fuga de memória quando deitar excepções de blocos de excepção aninhados

Traduções de Artigos Traduções de Artigos
Artigo: 810178 - Ver produtos para os quais este artigo se aplica.
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Quando um erro de excepção é accionado de uma cláusula catch, irá divulgar o primeiro objecto de excepção.

Por exemplo, quando ocorre um erro enquanto o programa está em execução, poderá utilizar uma instrução try-catch para processar a excepção. No entanto, se o código que processa a excepção na cláusula catch lança excepção outra, o primeiro objecto excepção nunca será eliminado pelo recolector de lixo do .NET Framework. Isto faz com que uma fuga de memória no processo de chamada.

Resolução

Agora é disponibilizada pela Microsoft uma correcção suportada, mas destina-se apenas a corrigir o problema descrito neste artigo. Aplique-a apenas em computadores que tenham este problema específico. Esta correcção poderá ser submetida a testes adicionais. Por conseguinte, se não estiver a ser gravemente afectado por este problema, a Microsoft recomenda que aguarde pelo próximo service pack do .NET Framework que contenha esta correcção.

Para resolver este problema imediatamente, contacte a produtos da Microsoft apoio para obter a correcção. Para obter uma lista completa de números de telefone do suporte técnico da Microsoft e informações sobre os custos de suporte, visite o seguinte Web site da Microsoft:
http://support.microsoft.com/contactus/?ws=support
Nota : em casos especiais, os custos normalmente inerentes às chamadas de suporte poderão ser anulados se um técnico de suporte da Microsoft determinar que uma actualização específica resolverá o problema. Os custos de suporte normais se aplicarão perguntas de suporte adicionais e problemas que não se enquadrem na atualização específica em questão.

A versão inglesa desta correcção tem os atributos de ficheiro (ou posteriores) listados na seguinte tabela. As datas e horas destes ficheiros são indicadas no formato de universal hora (UTC) coordenada Coordinated. Quando visualiza as informações do ficheiro, é convertido para a hora local. Para determinar a diferença entre a UTC e a hora local, utilize o separador fuso horário na ferramenta Data e hora no painel de controlo.
   Date         Time   Version       Size       File name
   --------------------------------------------------------------
   16-Nov-2002  04:05  1.0.3705.378     69,632  Corperfmonext.dll
   16-Nov-2002  14:28  1.0.3705.378  1,953,792  Mscorlib.dll
   16-Nov-2002  03:56                   10,272  Mscorlib.ldo
   16-Nov-2002  04:04  1.0.3705.378  2,269,184  Mscorsvr.dll
   16-Nov-2002  04:04  1.0.3705.378  2,269,184  Mscorwks.dll

Mais Informação

Passos para reproduzir o comportamento

Nota Segue-se mínimo informações relevantes para demonstrar o problema é abordado neste artigo.

Para reproduzir o problema, incluir o seguinte código num projecto do Visual C# .NET e execute-o directamente (não no IDE do ou no outro depurador):
for (;;)
{
	try
	{
		throw new System.Exception("I leak.");
	}
	catch
	{
		try
		{
			throw new System.Exception("I do not leak.");
		}
		catch
		{
		}
	}
	Console.Write("Press ENTER to iterate.");
	Console.ReadLine();
}
Irá reparar que este código fugas 2 alças de recolha de lixo por cada iteração.

Pode monitorizar este comportamento, observando os seguintes contadores do desempenho:
  • Memória do .NET CLR - #Bytes em todas as pilhas aumentará por iteração
  • .NET CLR Memória - identificadores de # GC irão incrementar por 2 por iteração
Para obter informações adicionais sobre a utilização do desempenho, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
248345Como criar um registo com o Monitor de sistema no Windows 2000

Ponto Da Situação

A Microsoft confirmou que este é um problema nos produtos da Microsoft listados no início deste artigo.

Propriedades

Artigo: 810178 - Última revisão: 10 de fevereiro de 2014 - Revisão: 2.4
A informação contida neste artigo aplica-se a:
  • Microsoft .NET Framework 1.0 Service Pack 2
Palavras-chave: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbnetframe100presp3fix kbfix kbbug KB810178 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 810178

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com