33 votos

Limitar el uso de la CPU de Excel

¿Hay alguna forma de limitar el uso de la CPU a la que Excel tiene acceso cuando se ejecuta? Tengo un VBA script que calcula un montón de fórmulas de matrices gigantes. El cálculo completo toma tal vez 20 minutos usando el 100% de mi CPU, pero no puedo usar mi máquina durante ese tiempo y prefiero que se ejecute en segundo plano con un 50% de uso de la CPU para poder seguir haciendo otras cosas. ¿Alguna sugerencia?

Mi sistema operativo es Windows 7 Enterprise 64-bit y la versión de Excel es 2007-32 bit

1 votos

¿Windows? ¿Qué versión?

0 votos

Windows 7. Lo añadiré al post

0 votos

Probablemente no es lo que quieres oír, pero la solución más fácil puede ser rediseñar tu código para que sea más eficiente. Si quieres hacer esa pregunta, aquí hay público para ello.

55voto

mtone Puntos 8485

Si se llama a una función VBA desde varias fórmulas o si su scriptgenera o fuerza el recálculo de varias fórmulas, entonces esto debería definitivamente hacer uso del cálculo multihilo de Excel. Respectivamente, esto ejecutaría múltiples instancias de su función VBA para cada fórmula, o recalcularía múltiples celdas simultáneamente mientras su vba scriptse ejecuta en un solo hilo.

Puede limitar el número de hilos utilizados por Excel para recalcular fórmulas en Opciones de Excel... Ficha Avanzada... Sección Fórmulas.

enter image description here

0 votos

El sub VBA no es el problema, es la fórmula de matriz de Excel que el código VBA genera.

0 votos

@learningAsIGo Cierto, he simplificado mi respuesta. Háganos saber si establecer el número de hilos a 1 ayuda.

1 votos

Esto parece haber funcionado. Lo puse a 3 núcleos y se maximiza en el 75% de la CPU que me deja mucho espacio para hacer otras cosas. Gracias.

29voto

B540Glenn Puntos 23

En lugar de bajar la prioridad, prueba a cambiar la afinidad en el Administrador de tareas. Si tienes más de 1 CPU, puedes limitar el número de CPUs que usará Excel. Esto liberará las otras CPUs para trabajar en otras cosas.

Haga clic con el botón derecho del ratón en la pestaña Procesos y seleccione Establecer afinidad. Elija la(s) CPU(s) donde desea que se ejecute Excel.

3 votos

Tenga en cuenta que para la afinidad, Windows considera cada núcleo como una CPU también. (Así que esto funcionaría si usted tiene un doble o cuádruple núcleo).

1 votos

Si hablamos específicamente de núcleos, ¿por qué no de hilos HyperThreading? También son CPU lógicas distintas. Por ejemplo, una CPU de cuatro núcleos con HT tendrá 8 CPU lógicas.

0 votos

Hago esto todo el tiempo cuando ejecuto HandBrake y sólo quiero navegar por Internet durante una hora sin pausar o detener el proceso de transcodificación. Creo que valdría la pena mencionar que después de algún tiempo los núcleos se liberan de nuevo al programa y la afinidad se "reinicia", al menos a mi me pasa con handbrake.

7voto

Slithy Toves Puntos 78

Puedes intentar bajar la prioridad del proceso excel, para lo cual debes abrir el administrador de tareas, cambiar a la pestaña "Detalles" o "Procesos" (según tu versión de Windows), hacer clic con el botón derecho en el proceso excel.exe y seleccionar una prioridad más baja. Esto debería dar más tiempo de CPU a otros procesos.

1 votos

No parece funcionar: He puesto la prioridad muy baja y el ordenador sigue fallando.

1 votos

¿Tal vez también deberías intentar aumentar la prioridad de tu navegador o de lo que estés intentando hacer al mismo tiempo? He encontrado este debate sobre la eficacia del cambio de prioridades .

3 votos

@SlithyToves: En realidad eso no debería importar. La prioridad determina qué programa se queda con la CPU, si hay varios candidatos. Establecer Excel en muy baja significa que sólo obtiene una porción de CPU cuando todos los demás programas han terminado. Sin embargo, cuando Excel hace obtiene una porción de CPU, no cederá esa porción. Sólo perderá la competencia por la siguiente porción de tiempo de CPU.

3voto

Yorik Puntos 435

Hay funciones de reposo y espera disponibles en VBA o a través de una declaración. Sin embargo, la "regla general demasiado simplista" es no utilizar nunca Sleep(). (google '"never use sleep()" programming')

Página del documento Application.Wait ( https://msdn.microsoft.com/en-us/library/office/ff822851.aspx ). Tenga en cuenta que Dormir y Esperar harán que Excel deje de responder durante la duración que usted especifique y esto puede causar "choques de trenes" en los cortes de tiempo.

Si su cálculo implica un bucle de algún tipo, entonces una manera de manejar esto para su propósito específico (perder el tiempo de cálculo para la disponibilidad de la CPU) es hacer una función especial de espera propia que, por ejemplo, hace un bucle DoEvents() durante 1 segundo y luego regresa.

DoEvents básicamente le dice a tu código/intérprete que deje el tiempo para el SO, etc. Definitivamente causará que su código tome más tiempo. También puede permitirte editar la hoja de trabajo mientras el cálculo está en marcha, así que tu kilometraje puede variar. Prueba.

Véase, por ejemplo, https://stackoverflow.com/questions/469347/is-there-an-equivalent-to-thread-sleep-in-vba

2voto

Ryan Puntos 44

Hace unos años se planteó una pregunta similar que tiene solución: ¿Existen soluciones que puedan limitar el uso de la CPU de un proceso?

Process Tamer funciona para Windows 7. http://www.donationcoder.com/Software/Mouser/proctamer/

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X