FIX: Prestazioni peggiorano quando si chiama metodi di un ServicedComponent

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

327782
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
Sintomi
Quando si esegue una chiamata da un AppDomain .NET remoto a un componente di Microsoft .NET è configurata in COM +, potrebbero verificarsi un rallentamento delle prestazioni nel dominio di applicazione che ha avviato la chiamata. Questo problema si verifica solo quando si richiama metodi su un ServicedComponent ospitato da un'applicazione server COM +.
Cause
Quando un'applicazione gestita invia le chiamate di metodo un ServicedComponent ospitato in un'applicazione server COM +, .NET Framework deve eseguire il marshalling i parametri del metodo. Per migliorare le prestazioni, il livello di marshalling interno utilizza un oggetto MemoryStream memorizzato nella cache per effettuare il marshalling e unmarshalling i parametri. Tuttavia, il gestore di marshalling utilizza sempre il buffer di MemoryStream completo per ogni chiamata, invece di passare solo i dati richiesti minimi.

Poiché il flusso sul quale è stato eseguito il marshalling può diventare maggiore del necessario, le applicazioni che utilizzano parametri di grandi dimensioni in una sola volta rilevino un degrado delle prestazioni per le chiamate che utilizzano parametri di piccole dimensioni in un secondo momento.
Risoluzione
È disponibile una correzione supportata da Microsoft, che è tuttavia destinata esclusivamente alla correzione del problema descritto in questo articolo. Utilizzarla solo nei computer in cui si verifica questo problema specifico. È possibile che su questa correzione vengano eseguiti ulteriori test. Se non si è notevolmente interessati da questo problema, si consiglia pertanto di attendere il rilascio del prossimo service pack di .NET Framework che contiene questa correzione.

Per risolvere immediatamente il problema, contattare il Servizio Supporto Tecnico Clienti Microsoft per ottenere la correzione. Per un elenco completo di numeri di telefono del servizio supporto tecnico clienti Microsoft e per informazioni sui costi dell'assistenza, visitare il seguente sito Web Microsoft: Nota : in casi particolari, le spese normalmente addebitate per le chiamate al supporto tecnico potrebbero essere annullate qualora un addetto del supporto Microsoft determinare che uno specifico aggiornamento risolverà il problema. I costi di supporto tipica verranno applicati per eventuali ulteriori domande e problemi che non dovessero rientrare nello specifico aggiornamento in questione.

La versione in lingua inglese di questa correzione presenta gli attributi di file elencati nella tabella seguente (o successivi). Date e ore per questi file sono indicati nella coordinated universal time (UTC). Quando si visualizzano le informazioni sul file, viene convertito in ora locale. Per calcolare la differenza tra ora UTC e l'ora locale, utilizzare la scheda fuso orario dello strumento Data e ora del Pannello di controllo.
   Date          Time    Version        Size      File name   ----------------------------------------------------------------------------------   10-Aug-2002   09:51   1.0.3705.302   208,896   System.EnterpriseServices.dll   09-Aug-2002   23:23   1.0.3705.302    47,104   System.EnterpriseServices.Thunk.dll				

Questa correzione è progettata specificamente per essere installato in un sistema che dispone già di Microsoft .NET Framework Service Pack 1. Se si deve dispone questa correzione rapida in un sistema che dispone di Microsoft .NET Framework Service Pack 2 installato, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
328545INFORMAZIONI: Pacchetto cumulativo di Hotfix di .NET Framework successivo al Service Pack 2 2
Status
Microsoft ha confermato che questo problema riguarda i prodotti Microsoft elencati all'inizio di questo articolo.
Informazioni

Procedura per riprodurre il problema.

Di seguito è riportato minime informazioni rilevanti per illustrare il problema descritto in questo articolo. Per ulteriori informazioni sulla creazione di ServicedComponent, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito:
306296Procedura: Creare un componente servito .NET in Visual C# .NET
Per riprodurre il problema, attenersi alla seguente procedura:
  1. Utilizzare il codice seguente per creare un componente:
    using System;using System.Reflection;using System.Runtime.CompilerServices;using System.EnterpriseServices;[assembly: AssemblyVersion("1.0.0.0")][assembly: AssemblyKeyFile("ComPlusTest.snk")][assembly: ApplicationName("ComPlusTest")][assembly: ApplicationActivation(ActivationOption.Server)]public class CServer : ServicedComponent{   [AutoComplete]   public String Exec(byte [] param)   {	return "done";   }}					
  2. Utilizzare il codice riportato di seguito per creare un'applicazione client:
    using System;public class CClient{   public static void Main()   {      CServer pObj = new CServer();      byte [] pLarge = new byte [2000];      byte [] pSmall = new byte [10];      // method call with large param      pObj.Exec(pLarge);      // method call with small param      // takes just as long as the earlier call      pObj.Exec(pSmall);      pObj.Dispose();   }}					
A causa di questo bug, la seconda chiamata a CServer.Exec accetta, purché la prima chiamata, anche se il parametro è minore.

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 327782 - Ultima revisione: 01/23/2014 01:11:15 - Revisione: 3.5

  • Microsoft .NET Framework 1.0 Service Pack 1
  • Microsoft .NET Framework 1.0 Service Pack 2
  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbfix kbnetframe100presp3fix kbqfe KB327782 KbMtit
Feedback