Pergunta

Eu encontrei um problema estranho esta semana que eu não posso explicar: eu mudei o meu aplicativo para usar a versão assinada de algumas assembleias de terceiros (Xceed Grade e alguns de seus outros componentes) e a hora de início aplicação entrou no banheiro . Cada vez que o aplicativo carregado um assinado montagem, levou 30 segundos para carregar. iniciar a aplicação foi de 5 segundos a mais de 90 segundos. O que diabos está acontecendo aqui?!

Algumas outras informações:

  • Este é um WinForms aplicativo em execução sob .NET 3.5 SP1.
  • O computador não tinha ligação à Internet (de propósito, para segurança).
Foi útil?

Solução

Tenha um olhar para estes links:

Eles podem ajudar. Pode ser que a configuração em seus meios do sistema que o .NET framework está fazendo um monte de trabalho extra para verificar a montagem. Se este for o caso, então você pode configurá-lo para não ser tão exigente.

Outras dicas

pós Jason Evans' contém a resposta, mas na forma de um link. Eu pensei que seria bom para deixar a solução real aqui:

Crie um arquivo AppName.exe.config na mesma pasta que o executável (onde Appname é o nome do seu executável, para o desenvolvimento, isso seria na pasta de saída de depuração). Isto mostra um arquivo XML que assume você não tem outras entradas no arquivo de configuração principal; se você tiver o arquivo já, eu suponho que você gostaria apenas de acrescentar a nova seções / texto como necessário:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <runtime>
        <generatePublisherEvidence enabled="false" />
    </runtime>
</configuration>

Apenas alguém meter o resto vem através deste post, eu já traçou a questão um pouco mais, porque eu estava apenas tentando descobrir isso e encontrou esta página.

Parece que a CRL é verificada cada vez que você estiver executando o seu processo se a CRL existente que esteja em sua máquina expirou e ainda não atualizado com um novo. Você pode testar isso por bater a CRL em http://crl.microsoft.com/ pki / crl / produtos / CodeSignPCA.crl e verificar a data de validade. Agora configurar um proxy dentro de IE que não funciona. Defina a sua data máquina após a data de validade e reteste sua aplicação.

Se o seu NIC é desativado, o CRL não está marcada.

Se o seu NIC não tem gateway, a CRL não está marcada.

Se você tem um Proxy habilitado e um gateway, em seguida, a CRL é verificada e, se houver um problema com o proxy, então você vai experimentar este tempo limite.

Se você se conectar à internet com sucesso, então as atualizações CRL e você vai ficar bem por enquanto.

Meu aplicativo estava usando alguns componentes Xceed mais velho em .NET 2.0 e tem vindo a trabalhar para sempre por isso demorou um tempo para descobrir o que estava acontecendo.

Carregando assinado assembleias será definitivamente mais lento do que contrapartes não-assinado, porque as necessidades de assinatura a ser verificada, mas isso deve ser completamente insignificante.

Passar de 5 segundos a 90 segundos ?? Acho que você precisa entrar em contato com o autor montagem e perguntar-lhes se eles mudaram apenas a assinatura: -)

Eu acho que você tem as configurações de segurança definidas em uma maneira para que os certificados de montagens se verificou. Então ele provavelmente tenta acessar a web para verificar algum certificado e, em seguida, espera por um período de tempo (30 segundos é um número limite de tempo muito típico).

Você pode verificar isso se você olhar para o que acontece na medida em que 30 segundos. Para o meu palpite para ser verdade deve haver pouca utilização da CPU e pouca HDD acessa naqueles 90 segundos. Se você tiver alto uso da CPU ou limitado por seu disco rígido, então é outra coisa.

BTW:. Outra opção seria se o seu disco rígido está completamente cheio e os conjuntos são extremamente fragmentado (mas 90 segundos seria mais do que eu já ouvi falar nesse caso)

Tente iniciar sua aplicação do visual studio com "Step over". Isto irá iniciar o código pisando sobre cada aplicativo, para que possa verificar o que leva muito tempo. Uma vez tive isso, e descobriu-se que o meu servidor sql foi realmente confuso.

Outra maneira de descobrir por que demora tanto tempo é lugar breakpoint espalhados através do código de carregamento e ver o que o gargalo é. Se o aplicativo leva 90 segundos antes que o primeira como, provavelmente algo com XCeed, ou carregar os conjuntos assinados.

Btw, im cientes há melhores maneiras de perfil sua aplicação, mas isso rápido 'n maneira suja funciona muito agradável e eficiente para depurar tais problemas

Talvez os conjuntos assinados não são NGEN'd, enquanto os não assinadas são.

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