Tengo una biblioteca C# que procesa algunos archivos. Creé una consola y una aplicación de escritorio que usa la biblioteca y procesa un archivo de 256 mb en aproximadamente 1 minuto. Luego creé un servicio WCF alojado en un servicio de Windows que usa la misma biblioteca de procesamiento de archivos pero que toma 10 veces más tiempo procesar el mismo archivo de 256mb cuando se lo llama desde un sitio web. El servicio de Windows se ejecuta bajo una cuenta de dominio con privilegios de administrador.WCF Service alojado en el servicio de Windows ejecutando 10 veces más lento que la aplicación de la consola
La sobrecarga de llamar al servicio de WCF es muy rápido sin embargo, el método de LoadFile toma mucho más tiempo. He intentado aumentar la prioridad del proceso durante el arranque a través de
Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.High;
en vano. He ejecutado este servicio en un sistema de escritorio Win7 de 64 bits (6 GB), 2003 XP de 32 bits (4 GB) y 2008 R2 de 32 bits (4 GB), todos con resultados similares. Las aplicaciones de consola y escritorio procesan el archivo en aproximadamente 1 minuto en el sistema anterior. El proceso no parece estar limitado por la memoria e ingresa swapville.
Están servicios de las ventanas de alguna manera limitados proceso? ¿Obtendría mejores resultados ejecutando el servicio WCF bajo IIS?
EDIT: Intenté llamar al directorio de la biblioteca desde el sitio web y eso también lleva 10 veces más tiempo que la consola o la aplicación de escritorio.
ACTUALIZACIÓN: Resulta que era Log4PostSharp. Las aplicaciones de consola y escritorio no tenían ningún rastro de log4net en los archivos de configuración, pero el sitio web y el servicio de Windows sí. Había un log4net TraceAppender consumiendo silenciosamente preciosos ciclos de CPU.
¿Cómo estás cargando el archivo exactamente? ¿Probaste con un generador de perfiles para ver dónde está exactamente el cuello de botella? (VS 2010 Ultimate contiene un generador de perfiles) –
Recomendaría restaurar la clase de prioridad del proceso a la normalidad si aún no lo has hecho. La modificación de la prioridad del proceso generalmente no acelerará un programa y podría crear otros problemas. –
@Davide: el generador de perfiles también está en Premium. +1; Este es el camino a seguir. –