창 포커스가없는 경우에도 어떻게 Microsoft Excel을 최고 속도로 실행합니까? 매크로 를 완료

Excel 2007 (및 이전 버전)에 창 포커스가있는 경우 Excel이 최고 속도로 실행되므로 파일을 빠르게 열고 오래 실행되는 VBA 매크로를 빠르게 실행할 수 있습니다.

Excel 창이 포커스를 잃으면 Excel의 스레드 우선 순위가 급격히 떨어지고 포커스를 느리게 열었을 때 열리는 큰 파일이 열리고 복잡한 VBA 매크로 를 완료 하는 시간 이 오래 걸립니다.

포커스 여부에 관계없이 Excel 우선 순위를 높게 유지할 수있는 방법이 있습니까?

작업 관리자를 통해 스레드 우선 순위를 인위적으로 높일 수는 있지만 스프레드 시트 또는 OS에 어떤 영향을 미치는지 확실하지 않습니다.

내 시스템은 4Gb RAM이있는 빠른 듀얼 코어이며 Vista 64를 실행하고 있습니다.

설명 편집 :

내 문제는 작업 관리자를 통해 Excel 프로세스의 우선 순위를 높이는 것이 아닙니다 . 창 포커스가있을 때 Excel 에만 영향을 미치기 때문 입니다.

요점은 Excel이 창 포커스를 잃을 때 발생하는 것입니다.

Excel을 광범위하게 사용 함으로써 의도적으로 Excel 창에 포커스가 없으면 의도적으로 자체 프로세스 우선 순위가 낮아 지는 것처럼 보입니다 .

Excel 프로세스의 우선 순위를 높게 설정해도이 문제가 발생하는 것을 막을 수는 없습니다. Excel은 포커스가있을 때 프로세스 우선 순위를 높이지만 포커스를 잃으면 여전히 급격히 줄어 듭니다.

일반적인 Excel 사용 (아마도 그것을 사용하는 사람의 99 %)에서는이 효과를 알지 못하지만 거대한 스프레드 시트 (약 2000 개의 워크 시트, 생각합니다)와 실행하는 데 몇 분이 걸리는 복잡한 VBA 매크로가 있으면 그 효과는 매우 높습니다 눈에.니다.

이상적으로 Excel 창의 초점 여부에 관계없이 동일한 스레드 우선 순위를 유지해야합니다.

지금까지 처리 중에 몇 분 동안 컴퓨터에서 몇 분 동안 앉아 있었기 때문에 실수로 Excel 창을 클릭하지 않고 더 나은 해결책이 있기를 바랐습니다. 어떤 종류의 레지스트리 해킹?

편집하다:

나는 이 링크 에서 그물 에이 문제에 대한 다른 언급을 발견했습니다.

이것은 관련 인용문입니다 …

그러나 Excel 2000 창을 사용자에게 표시하고 창에 계속 초점을 맞추면 매크로가 예상 속도로 실행됩니다. 다시, 창에 초점이 있거나 매크로가 다시 크롤링 속도를 늦 춥니 다.



답변

기본적으로 Windows 비 서버 에디션 은 포 그라운드 프로세스에 우선 순위를 높 입니다. Excel을 배경으로 밀면 이전에 전경에 있던 부스트가 사라집니다. 다른 프로그램은 대신 우선 순위를 높입니다.

프로그램이 더 이상이 부스트를 얻지 않도록 설정을 변경할 수 있습니다. 참고 : 이것은 Excel에만 영향을 미치지 않지만 부스트 자격이있는 모든 프로그램에 영향을 미칩니다.

Windows XP에서 설정을 조정하는 방법은 다음과 같습니다.

  1. 내 컴퓨터를 마우스 오른쪽 단추로 클릭하십시오 .
  2. 속성을 선택하십시오 .
  3. 고급 탭을 클릭 하십시오.
  4. 에서 성능 패널에서 클릭 설정 버튼을 누릅니다.
  5. 고급 탭을 클릭 하십시오. 첫 번째 패널은 프로세서 스케줄링입니다 .

    프로세서 스케줄링 패널

  6. 기본값을 “프로그램”에서 “배경 서비스”로 변경하면 Excel이 백그라운드에있을 때 원하는 방식으로 더 가깝게 작동해야합니다.


답변

귀하의 경우 Excel 프로세스 우선 순위를 정상 이상 으로 변경하는 데 문제가 있다고 생각하지 않습니다 . 문제가되지 않습니다.

시스템 프로세스와 경쟁 할 수있는 최고 수준으로 만들지 마십시오 . 일시 중단
하지 마십시오. 그렇지 않으면 다른 작업이 중단 될 수 있습니다!


당신이 사용하는 경우 마크 러시 노 비치프로세스 탐색기를
시스템에서 실행중인 프로세스의 우선 순위를보고.
다음과 같은 우선 순위 값과 관련을 보여줍니다.

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

프로세스 탐색기를 사용 하고 Excel의 우선 순위를 다시 매길 수 있습니다. 8
이상으로 이동 하지만 10 이상 이면 정상 이상 12 이상으로 가지 마십시오.

같은 과정에서 일부 프로세스가 초점을 맞추지 않은 상태에서 너무 많은 프로세서 시간을 소비한다고 생각하면 우선 순위를 Idle로 낮출 수 있습니다.
나는 보통이 기술을 사용합니다.


답변

여기에는 고려해야 할 몇 가지 사항이 있습니다. 프로세스의 우선 순위를 변경하면 해당 기본 우선 순위는 모든 스레드와 다른 프로세스에서 상속됩니다. 현재 우선 순위는 기본 우선 순위와이를 강화해야하는지 여부를 결정하는 여러 가지 요소로 구성됩니다. 포 그라운드에있는 것이 반드시 우선 순위를 높이는 것은 아니지만 대기 상태에서 벗어나거나 일부 IO를 수행하는 것과 같은 것은 일시적인 부스트를 제공하십시오.

매우 집중적 인 통합 문서를 작업 할 때 우선 순위가 높은 Excel 프로세스를 실행하는 것이 합리적 일 수 있으며 “높은 우선 순위 Excel”이라는 두 번째 바로 가기를 사용하는 것이 좋습니다. 먼저 적절한 스위치로 시작 명령을 실행하는 한 줄 배치 파일을 만드십시오.

start "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office12\EXCEL.EXE"

(64 비트 버전의 Windows start "high priority excel" /max /high "C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE"에서는 2010 년 이후에만 사용할 수있는 64 비트 버전의 Office를 실행하지 않는 한) Windows start "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE"제목은 원하는대로 지정할 수 있지만 선택 사항은 아닙니다.

이제 이것을 예를 들어 HiperExcel.cmd로 저장하십시오. 어딘가 편리한 위치에 있습니다. 아마도 오피스 폴더 또는 ac : \ scripts 폴더 또는 그와 같은 폴더 또는 홈 폴더로 폼 머신을 로밍 할 수 있습니다. 이 파일을 가리키는 새 바로 가기를 만들고 시작 폴더를 파일이 보관 된 폴더로 만듭니다. 파일 아이콘을 선택하십시오-Excel.exe 실행 파일을 찾은 다음 명확성을 위해 일반적인 Excel 아이콘 이외의 것을 선택하십시오 .

새 바로 가기를 클릭하면 기본 우선 순위가 13 인 우선 순위가 높은 프로세스로 실행중인 Excel이 호출되고 실행시 비 실시간 프로세스에 대한 최대 우선 순위가 15가됩니다. 우선 순위가 높아서는 안됩니다. 포 그라운드 프로세스는 포 그라운드에있는 것만으로 우선 순위를 높이 지 않습니다 (NT4.0 이후가 아님). 무슨 일이야?

우리가 지금까지 알고있는 내용을 다시 한 번 살펴 보자 : 프로세스는 우선 순위에 따라 교대로 진행되지만 우선 순위가 낮은 프로세스 (절대적으로 스레드는 있지만 토론을 쉽게하기 위해 프로세스를 유지하도록 함)를 절대적으로 배제하지는 않는다. 프로세스가 “턴”을 받으면 어떻게됩니까? 그것은 양자라고 불리는 시간 단위로 실행됩니다. 양자는 얼마입니까? 때에 따라 다르지…

이것은 포 그라운드 프로세스가 더 많은 자원을 사용하는 곳입니다. 턴을 할 때 그 턴은 백그라운드 프로세스의 턴보다 3 배 더 오래 지속될 수 있습니다. 따라서 우선 순위에 따라 자주 이동하지 않을 수도 있지만 그렇게 할 때 더 오래 걸립니다.

짧은 또는 긴 양자 (기본값은 워크 스테이션 OS에서는 짧고 서버에서는 긴 것)를 사용하고 포 그라운드 프로세스가 향상되었는지 (w / s에 대한 변수, 기본적으로 서버에 대해 고정됨)를 선택할 수 있습니다. 얼마만큼 (효과적으로 최대 3 배). 곱셈기를 변경하기로 선택하면 양자에 대해 매우 짧은 값을 갖는 모든 것으로 끝나고, 전경 부스팅을 비활성화하면 모든 것이 길지만 동등한 양이됩니다. 물론 사용하지 않도록 설정하면 백그라운드 윈도우 서비스가 사용자 응용 프로그램과 동일한 퀀텀을 가지므로 이상적이지 않을 수 있습니다. 비트 마스크를 사용하여 레지스트리에서 HKLM \ System \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparation에 값을 설정해야합니다. 일을 더 쉽게하기 위해 가장 원하는 값은 다음과 같습니다.

2 = 기본값, 최대 부스트와 함께 기본값 사용을 의미합니다. 워크 스테이션 O / S의 기본값은 짧고 가변적입니다. 8 = 고정, 짧은 양자 (전경 및 배경이 동일) 40 (십진, x28 16 진) = 고정 및 긴 (서버 ​​기본값과 동일) 36 (십진, x24 16 진) = 짧고 가변적이지만 전경 프로세스의 최소 부스팅 . 나는 이것이 다른 앱의 경쟁 량을 줄이는 가장 큰 이점을 줄 것이라고 생각하지만, 우선 순위를 높이는 한 포 그라운드에서 Excel이 더 많은 리소스를 얻을 수있게합니다.

시도해보고 도움이되기를 바랍니다-마일리지는 다를 수 있습니다.

옆으로 : 많은 다른 응용 프로그램이나 프로세스에는 병목 현상이 발생하는 CPU가 없습니다. Outlook 동기화 및 IE 브라우징의 예에는 네트워크가있을 수 있으며 Outlook의 경우 속도에있어 중요한 요소로 디스크 IO가있을 수 있습니다. 포 그라운드 부스트 여부에 상관없이, 가시적 인 성능에 미치는 영향은 간단한 관찰로 볼 수있는 것보다 낮을 것입니다.


답변

“정상”또는 “높음”보다 프로세스 우선 순위를 높이는 데 문제가 없으며 “실시간”으로 설정하지 마십시오. 특히 죄송합니다 Excel에 도움이되지 않습니다.


답변

우선 순위 조작은 Excel이 아니라 Windows 자체에서 수행 될 수 있습니다. Windows에는 포 그라운드에 창이있는 프로세스의 우선 순위가 강화되는 메커니즘 이 있습니다. 따라서 Excel에서 포커스를 잃으면 우선 순위가 정상으로 돌아갑니다 (약간 낮음).

MSDN에서 빠른 검색으로 이것에 대해 찾을 수있는 유일한 페이지는 Priority Boosts입니다 .

사용하는 프로세스를 NORMAL_PRIORITY_CLASS포 그라운드로 가져 오면 스케줄러는 포 그라운드 창과 연관된 프로세스의 우선 순위 클래스를 높여서 백그라운드 프로세스의 우선 순위 클래스보다 크거나 같습니다. 프로세스가 더 이상 포 그라운드에 있지 않으면 우선 순위 클래스가 원래 설정으로 돌아갑니다.

내가들은 바에 따르면 우선 순위 상승을 비활성화하는 방법이 있습니다.


답변

그냥 시도해보십시오. 그것은 나를 위해 일했습니다.

그리 좋은 방법은 아니지만 실제로 계산 속도를 두 배로 늘 렸습니다! 놀랄 만한! (그러나 나는 결과를 확인하고 확실하지 않습니다 …)

사용자 양식은 1024 * 768에서 화면 중앙에 있어야합니다. 소프트웨어로 사용자 양식을 마우스 오른쪽 버튼으로 클릭하면됩니다.

전체 계산을 수행하지만 계산하는 동안 컴퓨터를 사용하지 마십시오 (다른 프로그램, 창 시작 ..).

그것이 당신을 위해 어떻게 작동했는지 말해보십시오!

'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`


답변

전속력 계산의 긴 밤과 점검 후 오늘 아침의 결과는 완전히 잘못되었습니다.

그래서 나는 그것이 단지 버그라고 생각합니다. 계산이 제대로 수행되지 않았습니다.

계산에서 사용자 양식을 클릭하면 프로세스 속도가 빨라지지만 시트를 완전히 다시 계산하지는 않습니다. 나는 prio와 함께 실시간에 있었다는 것을 정확합니다.

또 다른 좋은 점은 prio_x64_199_2367.exe, http://softziz.com/2010/11/prio-64-bit-1-9-9/로 프로세스 작업을 조정하는 것입니다
.

그러면 나중에 사용할 수 있도록 작업 관리자 내부에서 CTRL ALT DEL로 정의 된 프로세스 우선 순위가 저장됩니다.

감사합니다.

남자