Estoy pensando en utilizar secuencias de comandos de Powershell para desencadena en nuestro servidor de Perforce. Por desgracia, incluso en nuestro rápido de hardware todavía tarda 2 segundos para Powershell para empezar. Ahora, esto no parece mucho tiempo, a menos que usted considere que 200 usuarios están golpeando el servidor constantemente, y un disparo de mayo (dependiendo de las condiciones) causa un bloqueo de tabla mientras se ejecuta, estancamiento de otras solicitudes relacionadas.

Estoy buscando formas de reducir el tiempo de inicio de Powershell. Cosas que he encontrado en Google:

  • Reducir el perfil. Este es un defecto de la instalación, sin la personalización del perfil, no PSCX, etc. así que esto no ayuda.
  • Ejecutar NGEN en la Elegante binarios. Esto es viejo consejos para una V1 problema. Estamos en V2.
  • Mantenerlo caliente. Inicial Elegante de inicio es lento, pero más tarde startups son rápidos. También no es útil para nosotros. En el servidor el arranque en caliente es de 2 segundos y se mantienen calientes por las frecuentes peticiones.
  • No usar Powershell para este propósito. Bueno, estoy con la esperanza de evitar que la «solución»…

¿Alguien tiene alguna sugerencia para el corte de tiempo de inicio? No estoy esperando un inicio tan rápido como cmd.exe o un .NETO de la aplicación de línea de comandos, pero si puedo conseguir que esto .5 segundos creo que vamos a estar bien. Imposible?

ACTUALIZACIÓN – resulta que este es un 4.0 problema. Si puedo agregar un archivo de configuración como se describe en de otro MODO la pregunta el inicio tarda 2 segundos. Si lo dejo en su defecto, a continuación, el inicio es en virtud de un cuarto de segundo.

Luego pensé..tal vez es un 4.0 GAC problema. Así que me fui corriendo el script en el PowerShell Blog pero dice que todas las asambleas son ya ngen. Me aseguré de que es de hecho el uso de la 4.0 ngen así.

Así que me quedan dos opciones:

  • Averiguar por qué 4.0 es mucho más caro que el 3.5.
  • Cambiar a la 3.5 marco donde no me necesita y yo necesito el rendimiento.

Me encantaría resolver la primera, pero no saben por dónde empezar. Alguien puede ayudar?

OriginalEl autor scobi | 2010-11-17

3 Comentarios

  1. 1

    Me temo que probablemente usted está fuera de suerte si usted se pega con el host de la consola powershell.exe a menos que usted se sienta como escribir una optimización del procesador de secuencia de comandos mediante el auspicio de un espacio de ejecución/runspacefactory en una consola personalizada de la aplicación o un servicio de windows – sacas de ti mismo. Usted puede afeitar a un segundo, pero de 0,5 s de inicio para una .NETO de la aplicación es poco probable, especialmente si los servidores están ajustados para la memoria.

    Ok me enteré de que es un 4.0 problema. Actualizado pregunta.
    Urgh. Estás obligando a powershell v2.0 a ejecutar en la v4 marco? No está diseñado para hacer eso. Me gustaría tener más detalles… ¿tienes dotTrace o las HORMIGAS profiler para averiguar dónde están los cuellos de botella?
    Si usted lee que PARA el artículo de cerca, verás que se trata de hosting System.Management.Automation.dll en un 4.0 entorno. Como el hombre dice, el host de la consola (powershell.exe) no está optimizado para 4.0 – de hecho, powershell.exe no es ni siquiera un administrado aplicación es nativa. Es sede de la CLR.
    No es compatible? Oh. Bueno, Powershell 2 se ejecuta con la v4 para nosotros sin los problemas que he visto hasta ahora. Sólo el retraso de inicio de tema. Y ASÍ, el artículo habla acerca de un 4.0 de la aplicación de hosting Powershell, así como el uso de Powershell 4.0 asambleas. Yo podría tratar de analizar con un .net profiler pero no creo que me va a dar algo que yo pueda actuar en.. Podría intentarlo de todos modos por curiosidad.

    OriginalEl autor x0n

  2. 20

    Ejecutar NGEN en la Elegante binarios. Esto es viejo consejos para una V1 problema. Estamos en V2.

    He estado jugando con este bajo V3, y me enteré de que algunas de las imágenes fueron
    generado.

    Y ciertamente parece de inicio es ahora mucho más rápido. Voy a conocer mejor después de un
    reiniciar, ya que la primera vez siempre es el peor. La (mi actualización) de secuencia de comandos para hacerlo
    con Win 7 es

    $env:path = [Runtime.InteropServices.RuntimeEnvironment]::GetRuntimeDirectory()
    [AppDomain]::CurrentDomain.GetAssemblies() | % {
      if (! $_.location) {continue}
      $Name = Split-Path $_.location -leaf
      Write-Host -ForegroundColor Yellow "NGENing : $Name"
      ngen install $_.location | % {"`t$_"}
    }
    He observado que con una instalación limpia de Windows 8.1, este consejo se aplica y reduce Powershell hora de inicio, acerca de 10x (si un perfil vacío está presente).

    OriginalEl autor bytehead

  3. 2

    Tras una excelente respuesta a mi pregunta en Technet, he descubierto una manera mucho más fácil para desencadenar NGEN manualmente (ya que parece que no sucede automáticamente en una instalación limpia de Windows 8.1):

    schtasks /Run /TN "\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319"
    schtasks /Run /TN "\Microsoft\Windows\.NET Framework\.NET Framework NGEN v4.0.30319 64"

    OriginalEl autor Jason R. Coombs

Dejar respuesta

Please enter your comment!
Please enter your name here