PRB: Создание компонентов STA в конструктор в ASP.Режим NET ASPCOMPAT негативно влияет на производительность

Переводы статьи Переводы статьи
Код статьи: 308095 - Vizualiza?i produsele pentru care se aplic? acest articol.
Эта статья помещена в архив. Она предлагается "как есть" и обновляться не будет.
Развернуть все | Свернуть все

Проблема

При вызове метода COM-объектов из приложения ASP.NET в режиме ASPCOMPAT, наблюдается существенное снижение производительности сервера.

Причина

Если используется режим ASPCOMPAT (то есть, если использовать страницу с <%@ ASPCOMPAT="true" %> директива) ASP.NET выполняет эти страницы в пуле потоков STA. Однако компоненты модели компонентных объектов (COM), создаваемые во время разработки создаются перед планированием запроса к пулу потоков однопотоковый апартамент (STA) и поэтому создается из потока многопотоковый апартамент (MTA). В этом случае наблюдается снижение производительности.

Наиболее значительно один и тот же поток (узел STA) выполняет все экземпляры компонентов COM объектов, созданных из потоки MTA. Это означает, что несмотря на то, что все пользователи имеют ссылку на собственный экземпляр COM-компонент, все вызовы на эти компоненты сериализуются для одного потока (только один вызов выполняется один раз).

Кроме того, предусмотрено снижение при каждом вызове компонента из небольших производительности Страница из-за Переключение потока событий. Это происходит потому, что Страница события выполняются в потоке из пула STA, но COM-компонент по-прежнему выполняется на узле STA (так как COM-компонент был создан из клиентского агента передачи сообщений). Этот переключатель потока также приводит к другим ошибкам при использовании олицетворения. Для получения дополнительных сведений см. раздел «Ссылки» данной статьи.

Решение

Если с компонентами STA используется режим ASPCOMPAT, метод или одним из только создавать компоненты COM Страница события (например, Page_Load, Page_Initи так далее), а не создавать эти компоненты COM во время создания.

Например избегайте объявления члена, следующую, который создает компонент во время создания:

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>
				
Вместо этого используйте следующий код:

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>
				

Статус

Данное поведение является особенностью.

Ссылки

Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
325791 PRB: Доступ запрещен, появляется сообщение об ошибке при использовании в ASP.NET и вызывать компоненты COM STA

Свойства

Код статьи: 308095 - Последний отзыв: 21 февраля 2014 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • 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
Ключевые слова: 
kbnosurvey kbarchive kbhttpruntime kbinterop kbperformance kbprb kbreadme kbthread kbmt KB308095 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке: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