.Net - assiemi interoperanti che richiedono 15 secondi per essere caricati quando si fa riferimento a una funzione

StackOverflow https://stackoverflow.com/questions/279495

  •  07-07-2019
  •  | 
  •  

Domanda

Questa è un'applicazione console C #. Ho una funzione che fa qualcosa del genere:

static void foo()
{
       Application powerpointApp;
       Presentation presentation = null;

       powerpointApp = new Microsoft.Office.Interop.PowerPoint.ApplicationClass();
}

Questo è tutto. Quando viene chiamato, c'è un ritardo di quindici secondi prima che la funzione venga colpita. Ho aggiunto qualcosa del genere:

static void MyAssemblyLoadEventHandler(object sender, AssemblyLoadEventArgs args)
{
       Console.WriteLine(DateTime.Now.ToString() + " ASSEMBLY LOADED: " + args.LoadedAssembly.FullName);
       Console.WriteLine();
}

Questo viene generato dicendo che i miei assembly di interoperabilità sono stati caricati circa 10 millisecondi prima che la mia funzione foo venga colpita. Cosa posso fare al riguardo? Il programma deve chiamare questa funzione (ed eventualmente fare qualcos'altro) una volta e poi uscire, quindi ho bisogno che questi assembly vengano memorizzati nella cache o qualcosa del genere. Idee?

È stato utile?

Soluzione

Potrebbe essere l'elenco di revoche di certificati: il timeout su questo è di 15 secondi. C'è qualcosa nel registro eventi? Puoi verificare se durante il timeout si verificano connessioni di rete?

Ho scritto alcuni dettagli sul ritardo di revoca del certificato qualche tempo fa. Segui il link, non lo taglierò e lo incollerò qui.

Altri suggerimenti

15 secondi mi sembrano un timeout. Stai firmando le tue assemblee? Si è verificato un problema in cui il framework desidera verificare l'elenco di revoche di certificati durante il caricamento, ma non riesce dopo 15 secondi.

HTH

Tim

<runtime>

   <generatePublisherEvidence enabled="false"/>

</runtime>

Vedi qui per i dettagli

http://msdn.microsoft.com/en-us/library /bb629393.aspx

" Raccomandiamo che i servizi utilizzino l'elemento per migliorare le prestazioni di avvio. L'uso di questo elemento può anche aiutare a evitare ritardi che possono causare un timeout e la cancellazione dell'avvio del servizio. & Quot;

Sto solo indovinando, ma è probabilmente il momento di avviare PowerPoint dopo il caricamento degli assembly di interoperabilità.

Se il metodo foo () non viene chiamato all'avvio dell'applicazione e hai altre attività da fare prima che venga chiamato, puoi avviare un thread separato all'inizio per caricare gli assembly.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top