PROBLEMA: Criando componentes STA no construtor no modo ASPCOMPAT ASP.NET negativamente afeta o desempenho

Traduções deste artigo Traduções deste artigo
ID do artigo: 308095 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Sintomas

Quando você chamar-threaded apartment componentes a partir de uma página ASP.NET no modo ASPCOMPAT, você notará grave degradação do desempenho.

Causa

Se você usar o modo ASPCOMPAT (ou seja, se você usar uma página com o < % @ ASPCOMPAT = "true" % > diretiva), ASP.NET executa essas páginas em um pool de thread STA. No entanto, componentes COM (Component Object Model) que são criados no momento da construção são criadas antes que a solicitação é agendada para o pool de segmentos single-threaded apartment (STA) e, portanto, são criados de um thread (MTA) multithreaded apartment. Nesse cenário, você enfrentar degradação do desempenho substanciais.

Mais significativamente, o mesmo thread (host STA) executa todas as instâncias de componentes-threaded apartment criados a partir de threads MTA. Isso significa que mesmo que todos os usuários tenham uma referência a sua própria instância do componente COM, todas as chamadas para esses componentes são serializadas para esse segmento de um (executa apenas uma chamada por vez).

Além disso, há um menor impacto toda vez que uma chamada for feita para o componente dos eventos de página devido a um comutador de thread no desempenho. Isso ocorre porque os eventos de página são executados em um thread do pool STA, mas o componente COM ainda é executado no host STA (porque o componente COM foi criado de um cliente MTA). Essa opção de thread também leva a outros erros se você usar representação. Para obter mais informações, consulte a seção "Referências" deste artigo.

Resolução

Se você estiver usando o 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 por diante) e não crie esses componentes COM em tempo de construção.

Por exemplo, evite uma declaração de membro semelhante à seguinte, que cria o componente no tempo de 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 .NET translation from VPE for Csharp
<%@ 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>
				
usar em vez disso, o código a seguir:

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>
				

Situação

Esse comportamento é por design.

Referências

Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
325791PROBLEMA: Acesso negado a mensagem de erro ocorre quando representando no ASP.NET e componentes de COM STA chamada

Propriedades

ID do artigo: 308095 - Última revisão: segunda-feira, 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 308095

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