PRB: Crear componentes STA en el constructor en modo ASP.NET ASPCOMPAT Negatively afecta al rendimiento

Seleccione idioma Seleccione idioma
Id. de artículo: 308095 - Ver los productos a los que se aplica este artículo
Este artículo se ha archivado. Se ofrece "tal cual" y no se volverá a actualizar.
Expandir todo | Contraer todo

Síntomas

Al llamar a componentes de subprocesamiento controlado desde una página ASP.NET en modo ASPCOMPAT, puede observar una degradación del rendimiento graves.

Causa

Si utiliza el modo ASPCOMPAT (es decir, si utiliza una página con la < % @ ASPCOMPAT = "true" % > directiva), ASP.NET se ejecuta esas páginas en un grupo de subprocesos STA. Sin embargo, componentes de modelo de objetos componentes (COM) que se crean en tiempo de construcción se crean antes de programar la solicitud al grupo de subprocesos de apartamento de un único subproceso (STA) y, por lo tanto, se crean desde un subproceso de apartamento multiproceso (MTA). En este escenario, experimenta degradación del rendimiento considerable.

De forma más significativa, el mismo subproceso (STA de host) ejecuta todas instancias de componentes de subprocesamiento controlado creadas a partir de subprocesos MTA. Esto significa que aunque todos los usuarios tienen una referencia a su propia instancia del componente COM, todas las llamadas a estos componentes se serializan para este uno subproceso (sólo una llamada se ejecuta en un momento).

Además, es un menor rendimiento cada vez que realiza una llamada al componente desde los eventos de página causa de un modificador de subproceso. Esto es porque los eventos de página se ejecuta en un subproceso desde el grupo STA, pero aún se ejecuta el componente COM en el host STA (porque se creó el componente COM desde un cliente MTA). Este modificador de subproceso también lleva a otros errores si utiliza la suplantación. Para obtener más información, consulte la sección "Referencias" de este artículo.

Solución

Si está utilizando modo ASPCOMPAT con componentes STA, sólo crear componentes COM desde un método o uno de los eventos de página (por ejemplo, Page_Load , Page_Init y así sucesivamente) y no podrá crear estos componentes COM en el momento de construcción.

Por ejemplo, evitar una declaración de miembro similar al siguiente, que crea el componente en el momento de construcción:

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>
				
utilice en su lugar el código siguiente:

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>
				

Estado

Este comportamiento es por diseño.

Referencias

Para obtener información adicional, haga clic en el número de artículo siguiente para ver el artículo en Microsoft Knowledge Base:
325791PRB: Acceso denegado Error Message Occurs When Impersonating en ASP.NET y componentes de COM STA de llamada

Propiedades

Id. de artículo: 308095 - Última revisión: lunes, 24 de febrero de 2014 - Versión: 2.9
La información de este artículo se refiere 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
Palabras clave: 
kbnosurvey kbarchive kbmt kbhttpruntime kbinterop kbperformance kbprb kbreadme kbthread KB308095 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 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