PROBLEMA: Criar componentes STA no construtor no modo ASPCOMPAT ASP.NET negativamente afecta o desempenho

Traduções de Artigos Traduções de Artigos
Artigo: 308095 - 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

Sintomas

Quando chama componentes apartment-threaded a partir de uma página ASP.NET no modo ASPCOMPAT, poderá notar uma degradação de desempenho graves.

Causa

Se utilizar o modo ASPCOMPAT (ou seja, se utilizar uma página com o < % @ ASPCOMPAT = "true" % > directiva), ASP.NET é executado essas páginas num conjunto de threads STA. No entanto, componentes COM (Component Object Model) que são criados durante a construção são criadas antes do pedido está agendado para o conjunto de threads single-threaded apartment (STA) e assim são criadas a partir de um thread com vários threads apartment (MTA). Neste cenário, ocorrem degradação do desempenho substanciais.

Mais significativamente, mesmo thread (anfitrião STA) executa todas as ocorrências de componentes apartment-threaded que são criados de threads MTA. Isto significa que, apesar de todos os utilizadores terem uma referência à sua própria instância do componente COM, todas as chamadas para estes componentes são serializadas para este uma thread (executa apenas uma chamada ao mesmo tempo).

Além disso, existe um menor desempenho visitas sempre que uma chamada é efectuada para o componente de eventos página devido a um parâmetro de thread. Isto acontece porque os eventos de página são executados num thread do conjunto de STA, mas o componente COM ainda é executado no anfitrião STA (porque o componente COM foi criado por um cliente MTA). Este parâmetro thread também conduz a outros erros, se utilizar representação. Para mais informações, consulte a secção "Referências" deste artigo.

Resolução

Se estiver a utilizar modo ASPCOMPAT com componentes STA, apenas criar componentes COM a partir de um método ou um dos eventos de página (por exemplo, Page_Load , Page_Init e assim sucessivamente) e não crie estes componentes COM em tempo de construção.

Por exemplo, evite uma declaração de membro semelhante à seguinte, que cria o componente durante a construção:

Visual Basic .NET
<%@ Page Language="VB" ASPCOMPAT="TRUE" %>
<script runat="server">

Dim comObj As MyComObject = New MyComObject()

Public Sub Page_Load()
   comObj.DoSomething()
End Sub
</script>
				
Visual C# .NET
<%@ Page Language="C#" ASPCOMPAT="TRUE" %>
<script runat="server">

MyComObject comObj = new MyComObject();

public void Page_Load()
{
   comObj.DoSomething()
}
</script>
				
Visual J# .NET
<%@ Page Language="VJ#" ASPCOMPAT="TRUE" %>
<script runat="server">

MyComObject comObj = new MyComObject();

public void Page_Load()
{
  comObj.DoSomething();
}
</script>
				
utilizar em vez disso, o seguinte código:

Visual Basic .NET
<%@ Page Language="VB" ASPCOMPAT="TRUE" %>
<script runat="server">

Dim comObj As MyComObject 

Public Sub Page_Load()
   comObj = New MyComObject()
   comObj.DoSomething()
End Sub
				
Visual C# .NET
<%@ Page Language="C#" ASPCOMPAT="TRUE" %>
<script runat="server">

MyComObject comObj;

public void Page_Load()
{
   comObj = new MyComObject();
   comObj.DoSomething();
}
				
Visual J# .NET
<%@ Page Language="VJ#" ASPCOMPAT="TRUE" %>
<script runat="server">

MyComObject comObj;

public void Page_Load()
{
  comObj = new MyComObject();
  comObj.DoSomething();
}
</script>
				

Ponto Da Situação

Este comportamento ocorre por predefinição.

Referências

Para obter informações adicionais, clique no número de artigo existente abaixo para visualizar o artigo na base de dados de conhecimento da Microsoft:
325791PROBLEMA: Acesso negado a mensagem de erro ocorre durante a representação no ASP.NET e componentes do COM chamadas STA

Propriedades

Artigo: 308095 - Última revisão: 24 de fevereiro de 2014 - Revisão: 2.9
A informação contida neste artigo aplica-se a:
  • Microsoft ASP.NET 1.1
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft ASP.NET 1.0
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual J# .NET 2003 Standard Edition
  • Microsoft .NET Framework 1.1
Palavras-chave: 
kbnosurvey kbarchive kbmt kbhttpruntime kbinterop kbperformance kbprb kbreadme kbthread KB308095 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: 308095

Submeter comentários

 

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