.NET - conjuntos de interop, levando 15 segundos para carregar ao ser referenciado em uma função

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

  •  07-07-2019
  •  | 
  •  

Pergunta

Este é um aplicativo de console C#. Eu tenho uma função que faz algo assim:

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

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

Isso é tudo o que faz. Quando é chamado, há um atraso de quinze segundos antes que a função seja atingida. Eu adicionei algo assim:

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

Isso é demitido me dizendo que meus conjuntos de interop foram carregados cerca de 10 milissegundos antes que minha função Foo seja atingida. O que é que eu posso fazer sobre isto? O programa precisa chamar essa função (e eventualmente fazer outra coisa) uma vez e depois sair, para que eu precise para que esses conjuntos sejam armazenados em cache ou algo assim. Ideias?

Foi útil?

Solução

Pode ser a lista de revogação de certificados - o tempo limite é de 15 segundos. Existe alguma coisa no log de eventos? Você pode verificar se alguma conexão de rede está acontecendo durante o intervalo?

Eu escrevi alguns detalhes sobre o atraso de revogação de certificado um tempo atrás. Siga o link, eu não vou cortar e colá -lo aqui.

Outras dicas

15 segundos parecem um tempo limite para mim. Você está assinando suas montagens? Tivemos um problema em que a estrutura deseja verificar a lista de revogação do certificado ao carregar, mas falha após 15 segundos.

Hth

Tim

<runtime>

   <generatePublisherEvidence enabled="false"/>

</runtime>

Veja aqui para obter detalhes

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

"Recomendamos que os serviços usem o elemento para melhorar o desempenho da inicialização. O uso desse elemento também pode ajudar a evitar atrasos que podem causar um tempo limite e o cancelamento da startup de serviços".

Apenas adivinhando, mas provavelmente é a hora do PowerPoint iniciar depois que os conjuntos de interop foram carregados.

Se o método foo () não for chamado no início do aplicativo e você tiver outras tarefas a serem realizado antes de ser chamado, poderá iniciar um thread separado no começo para carregar os conjuntos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top