PRB: Vytvářet STA součásti ve konstruktor v režimu ASP.NET ASPCOMPAT negativně ovlivňuje výkon

Překlady článku Překlady článku
ID článku: 308095 - Produkty, které se vztahují k tomuto článku.
Tento článek byl archivován. Je nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Příznaky

Při volání součásti podprocesem apartment z stránky ASP.NET v režimu ASPCOMPAT můžete zaznamenat snížení výkonu závažné.

Příčina

Pokud použijete ASPCOMPAT režimu (tj. Pokud použít stránku s < % @ ASPCOMPAT = "true" %> direktiva), ASP.NET spuštěna na fondu podprocesů STA těchto stránek. Součásti Component Object Model (COM), které jsou vytvořeny v době stavby vytvořené před plánovaným požadavek fondu podprocesů jedním podprocesem apartment (STA) a proto vytvořen z podprocesu typu apartment s více podprocesy (MTA). V této situaci vyskytnout snížení výkonu podstatné.

Většina výrazně stejném podprocesu (hostitele STA) provede všechny instance podprocesem apartment součásti, které jsou vytvořeny z MTA podprocesů. To znamená, že přestože všichni uživatelé mají odkaz vlastní instanci součásti COM, všechny volání do tyto součásti jsou serializovat do jednoho podprocesu (pouze jedno volání provede současně).

Dále je menší výkon přístupů každém je provedeno volání součásti z události stránky z důvodu přepnutí podprocesu. Důvodem je, že události stránky jsou prováděny podprocesem z fondu STA, ale součást COM je stále spuštěn v hostiteli STA (protože součást COM byla vytvořena z klienta MTA). Tento přepínač podproces také zájemců jiné chyby, u kterých použít zosobnění. Další informace naleznete v "Odkazy" v tomto článku.

Řešení

Pokud používáte režim ASPCOMPAT s STA součásti pouze vytvoření součásti COM z metody nebo jedna Stránka události (například Page_Load, události Page_Init a tak dále) a nevytvářejte tyto součásti COM v okamžiku stavby.

Například vyhnout deklaraci členské podobná následující součást vytvoří v okamžiku vytváření:

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>
				
místo toho použít následující kód:

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>
				

Prohlášení

Toto chování je záměrné.

Odkazy

Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
325791PRB: Chybová zpráva dochází při zosobnění v ASP.NET a součástí COM STA volací odepření přístupu

Vlastnosti

ID článku: 308095 - Poslední aktualizace: 28. února 2014 - Revize: 2.9
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbnosurvey kbarchive kbmt kbhttpruntime kbinterop kbperformance kbprb kbreadme kbthread KB308095 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku: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