it-swarm-es.tech

¿Cómo se mantiene Microsoft Excel funcionando a toda velocidad incluso cuando no tiene el foco de ventana?

Me di cuenta de que cuando Excel 2007 (y probablemente versiones anteriores) tiene el foco de ventana, Excel se ejecuta a toda velocidad, lo que significa que los archivos se abren rápidamente y las macros de VBA de ejecución prolongada se ejecutan rápidamente.

Si la ventana de Excel pierde el enfoque, la prioridad de subproceso de Excel parece disminuir drásticamente y los archivos grandes que se estaban abriendo cuando movió el enfoque para abrirlo lentamente, y las macros VBA complejas toman un largo tiempo para completar.

¿Hay alguna forma de mantener alta la prioridad de Excel independientemente de si está enfocada o no?

Sé que podría aumentar la prioridad del hilo de forma artificial a través del Administrador de tareas, pero no estoy seguro de los efectos en cadena que esto podría tener para mis hojas de cálculo o mi sistema operativo.

Mi sistema es un rápido Dual Core con 4Gb RAM y está ejecutando Vista 64.

EDITAR PARA CLARIFICACIÓN:

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.

Debido al uso extensivo de Excel, parece que, por diseño , reduce deliberadamente su propia prioridad de proceso cuando la ventana de Excel no tiene el 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 enfoque, pero aún así cae drásticamente cuando pierde el enfoque.

En el uso normal de Excel (probablemente el 99% de todos los que lo usan), no notaría este efecto, pero con una hoja de cálculo masiva (alrededor de 2000 hojas de trabajo, creo) y macros VBA complejas 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 sentado lejos 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 solución mejor ... tal vez un truco 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 visible la ventana de Excel 2000 para el usuario y también mantengo la ventana enfocada, las macros se ejecutan con la velocidad esperada. Una vez más, la ventana debe tener el foco o la macro se ralentizará de nuevo.

10
Joe Schmoe

Las ediciones de Windows que no son de servidor, de forma predeterminada, proporcionan un aumento de prioridad al proceso de primer plano. Cuando empuja Excel a un segundo plano, pierde el impulso que tenía anteriormente al estar en primer plano; algún otro programa gana en cambio 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 modificar la configuración en Windows XP:

  1. Haga clic con el botón derecho Mi PC .
  2. Elija Propiedades .
  3. Haga clic en la pestaña Avanzado .
  4. En el panel Rendimiento , haga clic en el botón Configuración .
  5. Haga clic en la pestaña Avanzado . El primer panel es Programación del procesador:

    Processor Scheduling panel

  6. Cámbielo del valor predeterminado de "Programas" a "Servicios en segundo plano" y debería hacer que Excel se comporte más de la manera deseada cuando está en segundo plano.

6
Chris W. Rea

No creo que haya un problema con cambiar la prioridad del proceso de Excel a por encima de lo normal en su caso. No deberia ser un problema.

No lo haga ¡el más alto, donde competirá con los procesos del sistema.
No ¡suspender, ¡o puedes suspender otras cosas!


Si usa Mark Russinovich 's Process Explorer
para ver las prioridades de los procesos que se ejecutan en su sistema.
Muestra los siguientes valores de prioridad y su asociación.

24 Realtime
13 High         : procexp.exe itself is here, with winlogon, csrss
11              : smss is actually at 11
10 Above Normal :
 9              : lsass, services.exe are here
 8 Normal       : Most things are here
 6 Below Normal
 4 Idle

Puede usar el Explorador de procesos y probar algunas nuevas prioridades para Excel .
Muévalo arriba 8 , pero no vaya más allá de 12
Por encima de lo normal en 10 debería bastar, espero .

En la misma línea, si cree que algún proceso está ocupando demasiado tiempo de procesador mientras no está enfocado, puede reducir su prioridad hasta Inactivo .
Normalmente uso esta técnica para eso.

4
nik

Hay un par de cosas diferentes a considerar aquí: cuando cambia la prioridad de un proceso, esa prioridad base es heredada por todos sus subprocesos y otros procesos que inicia. La prioridad actual se compone de la prioridad base y de una serie de factores que determinan si debe potenciarse o no: estar en primer plano no necesariamente aumenta la prioridad, sino cosas como salir de un estado de espera o hacer algo IO puede dar un breve impulso temporal.

Sugeriría que ejecutar su proceso de Excel con una alta prioridad cuando se trabaja 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 64 bits de Windows, esto sería start "high priority Excel" /max /high "C:\Program Files (x86)\Microsoft Office\Office12\Excel.EXE" a menos que también esté ejecutando una versión de 64 bits de Office, que solo está disponible para 2010 en adelante start "high priority Excel" /max /high "C:\Program Files\Microsoft Office\Office14\Excel.EXE") Tenga en cuenta que el título del La ventana puede ser cualquier cosa que desee, pero no es opcional.

Ahora guarde esto como, por ejemplo, HiperExcel.cmd en algún lugar a mano, tal vez la carpeta de la oficina, o una carpeta c:\scripts o algo así, o su carpeta de inicio para que 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 icono para el archivo: busque el ejecutable de Excel.exe y luego elija algo diferente al icono habitual de Excel para mayor claridad.

Haga clic en su nuevo acceso directo e invocará Excel ejecutándose como un proceso de alta prioridad, con una prioridad base de 13 y, cuando se ejecute, probablemente obtendrá la prioridad máxima para procesos que no son en tiempo real de 15. Incluso si algo más recibe un impulso, no debería tener mayor prioridad. Tenga en cuenta que el proceso de primer plano NO obtiene un impulso de prioridad solo por estar en primer plano (no desde NT4.0). ¿Entonces qué está pasando?

Recapitula 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 en realidad, pero mantengamos las cosas en los procesos para facilitar la discusión). ¿Qué sucede cuando un proceso tiene su "turno"? Llega a funcionar durante una unidad de tiempo llamada cuanto. ¿Cuánto mide un cuanto? Depende...

Aquí es donde el proceso en primer plano usa 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 se pruebe con mucha frecuencia (dependiendo de la prioridad), pero cuando lo hace, lo acapara por más tiempo.

Puede optar por utilizar quantums cortos o largos (el valor predeterminado es corto en el sistema operativo de la estación de trabajo, largo en los servidores) y tener el proceso en primer plano impulsado o no (variable para w/s, fijo para servidores de forma predeterminada), y si está impulsado, por cuánto (efectivamente hasta 3 veces). Ahora, la parte engañosa de esto es que si eliges cambiar el multiplicador, terminas con valores muy cortos para el cuanto, mientras que si desactivas el impulso de primer plano, todo obtiene una cantidad más larga 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 desearía son:

2 = valor predeterminado, significa usar valores predeterminados con el máximo impulso. los valores predeterminados en el O/S de la estación de trabajo son breves y variables. 8 = fijo, cuántico corto (el primer plano y el fondo son iguales) 40 (decimal, x28 hex) = fijo y largo (esto es lo mismo que los valores predeterminados del servidor) 36 (decimal, x24 hex) = corto, variable pero refuerzo mínimo para el proceso de primer plano . Creo que este es el que probablemente le dará el mayor beneficio para reducir la cantidad en la que compiten otras aplicaciones, pero permitirá que Excel obtenga más recursos cuando esté en primer plano (siempre y cuando también aumente su prioridad).

Pruébelo y verá, 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 algún disco IO como factores más importantes en su velocidad, por lo que, ya sea que obtengan un impulso en primer plano o no, el impacto en el rendimiento visible probablemente esté por debajo de lo que puede ver con una simple observación.

3
AdamV

No hay ningún problema con aumentar la prioridad de un proceso a "por encima de lo normal" o "alta", simplemente no lo establezca en "tiempo real". No puedo ayudarlo con Excel específicamente, lo siento.

1
LachlanG

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 el primer plano ; por lo tanto, cuando Excel pierde el foco, su prioridad vuelve a la normalidad (que es un poco más baja).

La única página en MSDN que pude encontrar sobre esto con una búsqueda rápida es Priority Boosts :

Cuando un proceso que usa NORMAL_PRIORITY_CLASS se lleva al primer plano, el planificador aumenta la clase de prioridad del proceso asociado con la ventana de primer plano, de modo que sea mayor o igual que la clase de prioridad de cualquier proceso en segundo plano. La clase de prioridad vuelve a su configuración original cuando el proceso ya no está en primer plano.

Por lo que he oído, hay formas de desactivar ese aumento de prioridad.

1
CesarB

Solo prueba esto, funcionó para mí.

No es una forma muy agradable, ¡pero en realidad solo duplicó mi velocidad de cálculo! ¡Asombroso! (pero verificaré los resultados, no estoy seguro de ellos ...)

Su formulario de usuario debe estar en el centro de la pantalla en 1024 * 768. Simplemente envíe por software un clic derecho en el formulario de usuario.

Cálculo completo, pero no use su computadora mientras calcula (inicie otros programas, windows ..).

¡Solo intenta y dime cómo te funcionó!

'In General
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal Y As Long) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_RIGHTDOWN As Long = &H8
Private Const MOUSEEVENTF_RIGHTUP As Long = &H10

Private Sub Optimizer()
    'activate the window
    'AppActivate "Inbox - Microsoft Outlook"
    'move the cursor where you need it, I guessed at 200,200
    'Warning here : check the center coordinates of your userform!
    SetCursorPos 512, 374
    'send a down event
    mouse_event MOUSEEVENTF_RIGHTDOWN, 0&, 0&, 0&, 0&
    'and an up
    mouse_event MOUSEEVENTF_RIGHTUP, 0&, 0&, 0&, 0&
End Sub

'Inside your code
Call Optimiser`
0
John

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 hacen correctamente.

Al hacer clic en el formulario de usuario en el cálculo, simplemente 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 del proceso con prio_x64_199_2367.exe, http://softziz.com/2010/11/prio-64-bit-1-9-9/

Esto guarda la prioridad de su proceso definida con CTRL ALT DEL, dentro del administrador de tareas, para usos futuros.

Saludos cordiales,

Juan

0
John