.Net - assemblages interop prenant 15 secondes pour se charger lors de la référence dans une fonction

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

  •  07-07-2019
  •  | 
  •  

Question

Ceci est une application console C #. J'ai une fonction qui fait quelque chose comme ça:

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

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

C'est tout ce que ça fait. Lorsqu'il est appelé, il y a un délai de quinze secondes avant que la fonction ne soit touchée. J'ai ajouté quelque chose comme ceci:

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

Cela se déclenche en me disant que mes assemblages d'interopérabilité ont été chargés environ 10 millisecondes avant que ma fonction foo ne soit touchée. Que puis-je faire à ce sujet? Le programme doit appeler cette fonction (et éventuellement faire autre chose) une fois, puis se fermer. J'ai donc besoin que ces assemblys soient mis en cache ou quelque chose du genre. Des idées?

Était-ce utile?

La solution

Cela pourrait être la liste de révocation de certificats - le délai d’attente est de 15 secondes. Y a-t-il quelque chose dans le journal des événements? Pouvez-vous vérifier si des connexions réseau se produisent pendant le délai d'attente?

J'ai blogué quelques détails sur le délai de révocation de certificat il y a quelque temps. Suivez le lien, je ne vais pas le couper et le coller ici.

Autres conseils

15 secondes me semble être un délai d'attente. Est-ce que vous signez vos assemblées? Nous nous sommes heurtés à un problème lorsque le framework souhaitait vérifier la liste de révocation de certificats lors du chargement, mais échouait après 15 secondes.

HTH

Tim

<runtime>

   <generatePublisherEvidence enabled="false"/>

</runtime>

Voir ici pour plus de détails

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

"Nous recommandons aux services d'utiliser l'élément pour améliorer les performances de démarrage. L’utilisation de cet élément permet également d’éviter les retards pouvant entraîner un dépassement de délai et l’annulation du démarrage du service. "

Juste pour deviner, mais le moment est probablement venu pour PowerPoint de démarrer après le chargement des assemblys d'interopérabilité.

Si la méthode foo () n'est pas appelée au démarrage de l'application et que vous avez d'autres tâches à effectuer avant de l'appeler, vous pouvez démarrer un thread séparé au début pour charger les assemblys.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top