Pregunta

Esta semana encontré un problema extraño que no puedo explicar: cambié mi aplicación para usar la versión firmada de algunos ensamblajes de terceros (Xceed Grid y algunos de sus otros componentes) y la hora de inicio de la aplicación se fue al baño. . Cada vez que la aplicación cargaba un ensamblaje firmado, demoraba 30 segundos en cargarse. El inicio de la aplicación pasó de 5 segundos a más de 90 segundos. ¡¿Qué diablos está pasando aquí ?!

Alguna otra información:

  • Esta es una aplicación de WinForms que se ejecuta bajo .NET 3.5 SP1.
  • La computadora no tenía conexión a Internet (a propósito, por seguridad).
¿Fue útil?

Solución

Eche un vistazo a estos enlaces:

Podrían ayudar. Podría ser que la configuración en su sistema signifique que .NET Framework está haciendo mucho trabajo adicional para verificar el ensamblaje. Si este es el caso, entonces puedes configurarlo para que no sea tan delicado.

Otros consejos

La publicación de Jason Evans contiene la respuesta, pero en forma de un enlace. Pensé que sería bueno publicar la solución real aquí:

Cree un archivo Appname.exe.config en la misma carpeta que el ejecutable (donde Appname es el nombre de su ejecutable; para el desarrollo, esto estaría en la carpeta de salida de depuración). Esto muestra un archivo xml que asume que no tiene otras entradas en el archivo de configuración principal; Si ya tiene el archivo, asumo que simplemente agregaría las nuevas secciones / texto según sea necesario:

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

En caso de que alguien más llegue a esta publicación, he rastreado el problema un poco más, porque estaba tratando de averiguarlo y encontré esta página.

Parece que la CRL se comprueba cada vez que ejecuta el proceso si la CRL existente en su máquina se ha agotado, y aún no se ha actualizado con una nueva. Puede probar esto presionando la CRL en http://crl.microsoft.com/ pki / crl / products / CodeSignPCA.crl y verifique la fecha de caducidad. Ahora configure un Proxy dentro de IE que no funcione. Establezca la fecha de su máquina después de la Fecha de caducidad y vuelva a probar su aplicación.

Si su NIC está deshabilitada, la CRL no está marcada.

Si su NIC no tiene puerta de enlace, la CRL no está marcada.

Si tiene un Proxy habilitado y una puerta de enlace, la CRL está marcada y si hay un problema con el Proxy, experimentará este tiempo de espera.

Si se conecta correctamente a Internet, entonces la CRL se actualizará y estará bien por el momento.

Mi aplicación estaba usando algunos componentes Xceed más antiguos en .NET 2.0 y ha estado trabajando para siempre, por lo que tardé un rato en descubrir qué estaba pasando.

La carga de ensamblajes firmados definitivamente será más lenta que las contrapartes no firmadas porque la firma debe verificarse, pero esto debe ser completamente insignificante.

¿Pasando de 5 segundos a 90 segundos? Creo que necesita ponerse en contacto con el autor de la asamblea y preguntarles si solo cambiaron la firma :-)

Supongo que usted tiene configuradas las configuraciones de seguridad de manera que los certificados de ensamblaje se verifiquen. Por lo tanto, es probable que intente acceder a la web para verificar algún certificado y luego espera un tiempo de espera (30 segundos es un número de tiempo de espera MUY típico).

Puede verificar esto si observa lo que sucede en esos 30 segundos. Para mi suposición de que debería ser cierto, debería haber poco uso de la CPU y poco acceso a la unidad de disco duro en esos 90 segundos. Si tiene un uso elevado de la CPU o está vinculado a su disco duro, entonces es otra cosa.

BTW: Otra opción sería si su HDD está completamente lleno y los ensamblajes están EXTREMADAMENTE fragmentados (pero 90 segundos serían más de lo que yo haya oído en ese caso).

Intente iniciar su aplicación desde Visual Studio con " Pasar sobre " ;. Esto iniciará el código al pasar sobre cada aplicación, para que pueda comprobar lo que lleva tanto tiempo. Una vez tuve esto, y resultó que mi servidor sql estaba realmente desordenado.

Otra forma de descubrir por qué demora tanto es colocar un punto de interrupción dispersos a través del código de carga y ver qué es el cuello de botella. Si la aplicación tarda 90 segundos en antes , a su le gusta, probablemente algo con XCeed, o cargando los ensamblados firmados.

Por cierto, estoy consciente de que hay mejores formas de crear un perfil de su aplicación, pero esta forma rápida y sucia funciona de manera agradable y eficiente para solucionar estos problemas

Tal vez los ensamblajes firmados no sean NGEN, mientras que los no firmados lo son.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top