Me di cuenta de que cuando Excel 2007 (y probablemente las versiones anteriores) tienen el foco de la ventana, Excel se ejecuta a toda velocidad, lo que significa que los archivos se abren rápidamente y las macros VBA de larga ejecución se ejecutan rápidamente.
Si la ventana de Excel pierde el foco, la prioridad del hilo de Excel parece caer dramáticamente y los archivos grandes que se estaban abriendo cuando movió el foco se abrieron lentamente, y las macros complejas de VBA tardan mucho en completarse.
¿Hay alguna manera de mantener alta la prioridad de Excel independientemente de si está enfocada o no?
Sé que podría aumentar la prioridad de subprocesos artificialmente a través del Administrador de tareas, pero no estoy seguro de los efectos secundarios que esto podría tener para mis hojas de cálculo u SO.
Mi sistema es un Dual Core rápido con 4Gb de RAM y ejecuta Vista 64.
EDITAR PARA ACLARAR:
Mi problema no es simplemente aumentar la prioridad del proceso de Excel a través del Administrador de tareas porque esto solo afecta a Excel cuando tiene el foco de la ventana.
El punto es lo que sucede cuando Excel pierde el foco de la ventana.
Al usar Excel ampliamente, parece que, por diseño , disminuye deliberadamente su propia prioridad de proceso cuando la ventana de Excel no tiene foco.
Establecer una prioridad más alta para el proceso de Excel no evita que esto suceda: solo le da a Excel una prioridad de proceso más alta cuando tiene el foco, pero aún se reduce drásticamente cuando pierde el foco.
En el uso normal de Excel (probablemente el 99% de todos los que lo usan), no notarías este efecto, pero con una hoja de cálculo masiva (alrededor de 2000 hojas de trabajo, creo) y complejas macros VBA que tardan unos minutos en ejecutarse, el efecto es muy perceptible.
Idealmente, lo necesito para mantener la misma prioridad de hilo independientemente de si la ventana de Excel está enfocada.
Hasta ahora, he estado recostado de la computadora durante unos minutos durante el procesamiento para no hacer clic accidentalmente en la ventana de Excel cuando se está agotando, pero solo esperaba que hubiera una mejor solución ... tal vez un hack de registro de algún tipo?
EDITAR:
Solo he encontrado otra mención de este problema en la red en este enlace
Esta es la cita relevante ...
Sin embargo, si hago que la ventana de Excel 2000 sea visible para el usuario y también mantengo la ventana enfocada, las macros se ejecutan con la velocidad esperada. Nuevamente, la ventana debe tener foco o la macro se ralentiza nuevamente.
fuente
Respuestas:
Las ediciones de Windows que no son del servidor, por defecto, brindan un impulso prioritario al proceso de primer plano. Cuando empuja Excel a un segundo plano, pierde el impulso que tenía anteriormente en primer plano; algún otro programa en su lugar gana el impulso de prioridad.
Puede cambiar una configuración para que los programas ya no reciban este impulso. Nota: Esto no afectará solo a Excel, sino a cualquier programa que de otro modo hubiera calificado para un impulso.
Aquí se explica cómo ajustar la configuración en Windows XP:
Haz clic en la pestaña Avanzado . El primer panel es la programación del procesador :
Cambie el valor predeterminado de "Programas" a "Servicios en segundo plano" y debería hacer que Excel se comporte más cerca de lo que desea cuando está en segundo plano.
fuente
No creo que haya un problema al cambiar la prioridad del proceso de Excel a Por encima de lo normal en su caso. No deberia ser un problema.
No lo haga más alto , donde competirá con los procesos del sistema.
¡No lo suspendas o puedes suspender otras cosas!
Si utiliza Mark Russinovich 's Process Explorer
para mirar a las prioridades de los procesos que se ejecutan en el sistema.
Muestra los siguientes valores de prioridad y su asociación.
Podría usar el explorador de procesos e intentar una nueva priorización para Excel .
Muévalo por encima de 8 , pero no vaya más allá de 12
Por encima de lo normal a 10 debería hacer, espero.
En la misma línea, si cree que algún proceso está ocupando demasiado tiempo del procesador sin estar enfocado, puede reducir su prioridad hasta Idle .
Usualmente uso esta técnica para eso.
fuente
am
buscando este detalle, pero entiendo que la ventana en foco generalmente tendráNormal
prioridad (por defecto) y una vez que se muevaExcel
aAbove Normal
prioridad, debería ejecutarse con una prioridad más alta que la ventana enfocada. Pero, con menor prioridad que el sistema procesa, que es donde desea que esté.Hay un par de cosas diferentes a considerar aquí: cuando cambia la prioridad de un proceso, esa prioridad básica es heredada por todos sus hilos y otros procesos que comienza. La prioridad actual se compone de la prioridad base y una serie de factores que determinan si se debe aumentar o no; estar en primer plano no necesariamente aumenta la prioridad, pero cosas como salir de un estado de espera o hacer algo de IO pueden dar un breve impulso temporal.
Sugeriría que ejecutar su proceso de Excel con alta prioridad cuando trabaje en estos libros de trabajo muy intensivos podría tener sentido, y diría que un segundo acceso directo llamado "Excel de alta prioridad" podría ser una buena manera de hacerlo. Primero cree un archivo por lotes de una línea que ejecute el comando de inicio con los interruptores apropiados, por ejemplo:
start "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office12\EXCEL.EXE"
(en una versión de Windows de 64 bits esto sería a
start "high priority excel" /max /high "C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE"
menos que también esté ejecutando una versión de Office de 64 bits, que solo está disponible para 2010 en adelantestart "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE"
) Tenga en cuenta que el título de la ventana puede ser lo que desee, pero no es opcional.Ahora guarde esto como, por ejemplo, HiperExcel.cmd en algún lugar útil, tal vez la carpeta de Office, o la carpeta ac: \ scripts o somesuch, o su carpeta de inicio para que esto pueda moverse de una máquina a otra. Cree un nuevo acceso directo que apunte a este archivo, haga que la carpeta de inicio sea la carpeta donde se guarda el archivo. Elija un ícono para el archivo: busque el ejecutable Excel.exe y luego elija algo distinto del ícono habitual de Excel para mayor claridad.
Haga clic en su nuevo acceso directo e invocará a Excel ejecutándose como un proceso de alta prioridad, con una prioridad base de 13 y, cuando se ejecute, probablemente obtendrá la máxima prioridad para los procesos en tiempo no real de 15. Incluso si algo más recibe un impulso, No debería tener mayor prioridad. Tenga en cuenta que el proceso en primer plano NO obtiene un aumento de prioridad solo por estar en primer plano (no desde NT4.0). ¿Entonces qué está pasando?
Vuelva a limitar lo que sabemos hasta ahora: los procesos se turnan de acuerdo con la prioridad, pero no con la exclusión absoluta de los procesos de menor prioridad (bueno, los hilos realmente, pero guardemos las cosas en los procesos para facilitar la discusión). ¿Qué sucede cuando un proceso obtiene su "turno"? Se ejecuta por una unidad de tiempo llamada cuántica. ¿Cuánto dura un cuanto? Depende...
Aquí es donde el proceso en primer plano puede usar más recursos: cuando tiene un turno, ese turno puede durar tres veces más que los turnos de los procesos en segundo plano. Por lo tanto, es posible que no funcione con mucha frecuencia (según la prioridad), pero cuando lo hace, lo acapara por más tiempo.
Puede optar por usar cuánticos cortos o largos (el valor predeterminado es corto en el sistema operativo de la estación de trabajo, largo en los servidores) y aumentar o no el proceso en primer plano (variable para w / s, fijo para servidores de forma predeterminada), y si lo hace, cuánto (efectivamente hasta 3 veces). Ahora, la parte engañosa de esto es que si eliges cambiar el multiplicador, terminas con todo lo que tiene valores muy cortos para cuántica, mientras que si desactivas el impulso en primer plano, todo se vuelve más largo pero igual. Si lo deshabilita, por supuesto, los servicios de Windows en segundo plano obtienen la misma cantidad que sus aplicaciones de usuario, lo que podría no ser ideal. Debe establecer el valor en el registro en: HKLM \ System \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparation, utilizando una máscara de bits. Para facilitar las cosas, los valores más probables que desea son:
2 = valor predeterminado, significa usar valores predeterminados con el impulso máximo. los valores predeterminados en la estación de trabajo O / S son cortos y variables. 8 = fijo, cuántico corto (primer plano y fondo son iguales) 40 (decimal, x28 hexadecimal) = fijo y largo (esto es lo mismo que los valores predeterminados del servidor) 36 (decimal, x24 hexadecimal) = impulso corto, variable pero mínimo para el proceso en primer plano . Creo que este es el que probablemente le dará el mayor beneficio para reducir la cantidad que compiten otras aplicaciones, pero le permite a Excel obtener más recursos cuando está en primer plano (siempre que también aumente su prioridad).
Pruébelo y vea, espero que esto ayude, su kilometraje puede variar, por supuesto.
Aparte: muchas otras aplicaciones o procesos no tienen la CPU como su cuello de botella: sus ejemplos de sincronización de Outlook y navegación IE probablemente tengan la red, y posiblemente para Outlook algunos discos IO como factores más importantes en su velocidad, así que si obtienen un Impulso en primer plano o no, el impacto en el rendimiento visible es probablemente inferior a lo que se puede ver con una simple observación.
fuente
No hay problema con aumentar la prioridad de un proceso a "superior a lo normal" o "alto", simplemente no lo configure en "tiempo real". No puedo ayudarte con Excel específicamente lo siento.
fuente
Es posible que la manipulación prioritaria no la realice Excel, sino el propio Windows. Windows tiene un mecanismo donde se aumenta la prioridad de los procesos con ventanas en primer plano ; por lo tanto, cuando Excel pierde el foco, su prioridad vuelve a la normalidad (que es ligeramente inferior).
La única página en MSDN que pude encontrar sobre esto con una búsqueda rápida es Priority Boosts :
Por lo que he escuchado, hay formas de desactivar ese aumento de prioridad.
fuente
Solo intenta esto, funcionó para mí.
No es una manera muy agradable, ¡pero en realidad solo duplicó mi velocidad de cálculo! ¡Asombroso! (pero comprobaré los resultados, no estoy seguro de ellos ...)
Su formulario de usuario debe estar en el centro de la pantalla en 1024 * 768. Simplemente envía por software un clic derecho sobre el formulario de usuario.
Cálculo completo, pero no use su computadora mientras se calcula (inicie otros programas, ventanas ...).
¡Solo intenta y dime cómo te funcionó!
fuente
Después de una larga noche de cálculo a toda velocidad, y después de la verificación, los resultados de esta mañana fueron ... totalmente incorrectos.
Así que creo que es solo un error, los cálculos no se realizan correctamente.
Al hacer clic en el formulario de usuario en el cálculo, solo se acelera la velocidad del proceso, pero no se recalcula completamente la hoja más allá. Preciso que estaba en tiempo real con prio.
Otra cosa buena es ajustar la tarea de proceso con prio_x64_199_2367.exe, http://softziz.com/2010/11/prio-64-bit-1-9-9/
Esto guarda su prioridad de proceso definida con CTRL ALT DEL, dentro del administrador de tareas, para usos futuros.
Saludos cordiales,
Juan
fuente