Làm cách nào để giữ cho Microsoft Excel chạy ở tốc độ tối đa ngay cả khi nó không có tiêu điểm cửa sổ?


10

Tôi đã nhận thấy rằng khi Excel 2007 (và có thể là các phiên bản cũ hơn) có tiêu điểm cửa sổ, Excel sẽ chạy ở tốc độ tối đa, điều đó có nghĩa là các tệp mở macro VBA chạy nhanh và dài sẽ thực thi nhanh chóng.

Nếu cửa sổ Excel mất tiêu điểm, mức độ ưu tiên luồng của Excel dường như giảm đáng kể và các tệp lớn đang mở khi bạn di chuyển tiêu điểm mở chậm chạp và các macro VBA phức tạp mất nhiều thời gian để hoàn thành.

Có cách nào để giữ mức ưu tiên Excel cao bất kể nó có tập trung hay không?

Tôi biết rằng tôi có thể tăng mức độ ưu tiên của luồng một cách nhân tạo thông qua Trình quản lý tác vụ nhưng tôi không chắc những hiệu ứng kích thích này có thể có đối với bảng tính hoặc HĐH của tôi.

Hệ thống của tôi là Dual Core nhanh với RAM 4Gb và đang chạy Vista 64.

EDIT CHO CLARATIONATION:

Vấn đề của tôi không chỉ đơn giản là tăng mức độ ưu tiên của quy trình Excel thông qua Trình quản lý tác vụ vì điều này chỉ ảnh hưởng đến Excel khi nó có tiêu điểm cửa sổ.

Vấn đề là những gì xảy ra khi Excel mất tiêu điểm cửa sổ.

Từ việc sử dụng Excel rộng rãi, có vẻ như, theo thiết kế , nó cố tình hạ thấp mức ưu tiên quy trình của chính nó khi cửa sổ Excel không có tiêu điểm.

Đặt mức độ ưu tiên cao hơn cho quy trình Excel sẽ không ngăn điều này xảy ra - nó chỉ mang lại cho Excel mức độ ưu tiên cao hơn khi nó có trọng tâm nhưng nó vẫn giảm đáng kể khi mất tiêu điểm.

Trong sử dụng Excel bình thường (có thể là 99% tất cả mọi người sử dụng nó), bạn sẽ không nhận thấy hiệu ứng này nhưng với một bảng tính lớn (khoảng 2000 bảng tính, tôi nghĩ vậy) và các macro VBA phức tạp mất vài phút để thực thi, hiệu quả rất cao đáng chú ý.

Lý tưởng nhất, tôi cần nó để giữ mức độ ưu tiên của luồng giống nhau bất kể cửa sổ Excel có được tập trung hay không.

Cho đến bây giờ, tôi mới ngồi lại máy tính được vài phút trong khi xử lý để không vô tình nhấp vào cửa sổ Excel khi nó đang kêu lách tách nhưng tôi chỉ hy vọng có một giải pháp tốt hơn ... có lẽ một hack registry của một số loại?

BIÊN TẬP:

Tôi chỉ tìm thấy một đề cập khác về vấn đề này trên mạng tại liên kết này

Đây là trích dẫn có liên quan ...

Tuy nhiên, nếu tôi làm cho cửa sổ Excel 2000 hiển thị cho người dùng và cũng giữ cho cửa sổ được tập trung, các macro sẽ thực thi với tốc độ mong đợi của họ. Một lần nữa, cửa sổ phải có tiêu điểm hoặc macro chậm lại để thu thập dữ liệu.


Câu hỏi hay. Điều này cũng đã được chứng minh là một 'tính năng' gây khó chịu cho tôi, và vẫn không có giải pháp thực sự ...
Noldorin

Bản thân mức độ ưu tiên của luồng không ảnh hưởng đến hiệu suất trừ khi có một số luồng cạnh tranh cho một tài nguyên - trong trường hợp đó, mức độ ưu tiên cao hơn sẽ nhận được miếng bánh đầu tiên. Tôi đã không sử dụng Excel trong một thời gian dài, nhưng nó có thể tự điều chỉnh khi ở chế độ nền hoặc bạn có thể trở thành nạn nhân của cơ chế hoán đổi có phần chậm phát triển của Windows.
Mark K Cowan

Điều này xảy ra với tất cả các chương trình Office 2007 khi chạy các tập lệnh VBA dài. Tôi đã từng viết một tập lệnh lấy dữ liệu excel và đặt chúng vào các mẫu Word. Nếu tôi ẩn chương trình Word, sự loại trừ sẽ giảm xuống. Nếu tôi cho phép chương trình được hiển thị, kịch bản nhanh hơn ~ 10 lần.
wbeard52

Câu trả lời:


6

Các phiên bản Windows không phải máy chủ, theo mặc định, cung cấp mức tăng ưu tiên cho quy trình nền trước. Khi bạn đẩy Excel xuống nền, nó sẽ mất đi sự tăng cường mà trước đây nó đã ở phía trước; một số chương trình khác thay vì được tăng ưu tiên.

Bạn có thể thay đổi cài đặt để các chương trình không còn được tăng cường này nữa. Lưu ý: Điều này sẽ không ảnh hưởng đến Excel, nhưng bất kỳ chương trình nào có thể đủ điều kiện để tăng.

Dưới đây là cách điều chỉnh cài đặt trong Windows XP:

  1. Bấm chuột phải vào Máy tính của tôi .
  2. Chọn thuộc tính .
  3. Nhấp vào tab Nâng cao .
  4. Trong bảng Hiệu suất , nhấp vào nút Cài đặt .
  5. Nhấp vào tab Nâng cao . Bảng đầu tiên là Lập kế hoạch Bộ xử lý :

    Bảng điều khiển lập kế hoạch

  6. Thay đổi nó từ mặc định của "Chương trình" thành "Dịch vụ nền" và điều đó sẽ khiến Excel hoạt động gần hơn với cách bạn muốn khi nó ở chế độ nền.


Lưu ý rằng làm điều này sẽ làm cho các chương trình tiền cảnh thường có vẻ chậm chạp khi các ứng dụng và dịch vụ nền đột nhiên quyết định chúng muốn làm một cái gì đó.
Mark K Cowan

"Các phiên bản Windows không phải máy chủ, theo mặc định, cung cấp mức tăng ưu tiên cho quy trình nền trước." Không, họ không. (Họ đã làm trước Windows NT 4, nhưng đó là một thời gian dài trước đây.) Những gì họ làm là tạo thời gian cho quy trình tiền cảnh 3x miễn là thời gian cho các quy trình khác (90 ms so với 30). Ngoài ra còn có mức tăng ưu tiên +2 được áp dụng cho bất kỳ luồng nào trong quy trình nền trước khi nó giải quyết chờ. Vấn đề với giải pháp được đưa ra ở đây là nó khiến thời gian dài hơn nữa, 180 ms. Điều này có thể làm tổn thương đáng kể khả năng phản hồi của các ứng dụng chuyên sâu về UI.
Jamie Hanrahan

4

Tôi không nghĩ rằng có vấn đề với việc thay đổi mức ưu tiên của quy trình Excel thành Trên Bình thường trong trường hợp của bạn. Nó không phải là một vấn đề.

Đừng làm cho nó cao nhất , nơi nó sẽ cạnh tranh với các quy trình hệ thống.
Đừng đình chỉ nó, hoặc bạn có thể có những thứ khác bị đình chỉ trên đó!


Nếu bạn sử dụng Process Explorer của Mark Russinovich để xem xét các ưu tiên của các quy trình đang chạy trên hệ thống của bạn. Nó cho thấy các giá trị ưu tiên sau đây và hiệp hội của họ.

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

Bạn có thể sử dụng trình thám hiểm quy trình và thử một số ưu tiên lại cho Excel .
Di chuyển nó lên trên 8 , nhưng đừng vượt quá 12
Trên mức bình thường ở mức 10 nên làm, tôi mong đợi.

Đồng thời, nếu bạn nghĩ rằng một số quy trình đang chiếm quá nhiều thời gian của bộ xử lý trong khi không tập trung, bạn có thể hạ mức ưu tiên của nó xuống mức nhàn rỗi .
Tôi thường sử dụng kỹ thuật này cho điều đó.


Nhưng mức độ ưu tiên vẫn sẽ giảm khi Excel không tập trung, phải không? ... chỉ ở mức độ ưu tiên cao hơn một chút so với trước đây, tôi đoán vậy. Bạn có biết làm thế nào để giữ mức độ ưu tiên của luồng nhất quán bất kể tiêu điểm của cửa sổ không?
Joe Schmoe

Tôi amđang tìm kiếm chi tiết này, nhưng tôi hiểu rằng cửa sổ trong tiêu điểm thường sẽ được Normalưu tiên (theo mặc định) và một khi bạn chuyển Excelsang Above Normalmức ưu tiên, nó sẽ chạy ở mức ưu tiên cao hơn cửa sổ tập trung. Nhưng, ở mức độ ưu tiên thấp hơn thì hệ thống sẽ xử lý - đó là nơi bạn muốn nó đến.
nik

Trừ khi tôi hiểu sai những gì bạn đang nói, hàm ý của bạn là bạn có thể nâng mức độ ưu tiên của quy trình Excel và nó sẽ luôn ở mức ưu tiên đó mọi lúc. Nhưng từ việc sử dụng Excel rộng rãi, tôi có thể tự tin nói rằng nó không làm điều đó. Nó xuất hiện, theo THIẾT KẾ, nó làm giảm mức độ ưu tiên của chính nó khi cửa sổ Excel không có tiêu điểm. Đặt mức độ ưu tiên cao hơn cho quy trình Excel sẽ không ngăn điều này xảy ra - nó chỉ mang lại cho Excel mức độ ưu tiên cao hơn khi nó có trọng tâm nhưng nó vẫn giảm đáng kể khi mất tiêu điểm. Chỉ cần chạy thử nghiệm để xác nhận điều này.
Joe Schmoe

Tôi ngạc nhiên. Mặc dù vậy, tôi đã không sử dụng kỹ thuật này để nâng cao các ưu tiên của quy trình (chỉ để hạ thấp chúng).
nik

Tôi đã thêm một số thông tin vào câu hỏi để làm nổi bật quá trình hạ thấp có chủ ý này dường như đang diễn ra. Lý tưởng nhất, sẽ có một số loại hack registry sẽ ngăn chặn điều này xảy ra.
Joe Schmoe

3

Có một vài điều khác nhau cần xem xét ở đây: Khi bạn thay đổi mức độ ưu tiên của một quy trình, mức độ ưu tiên cơ sở đó được kế thừa bởi tất cả các luồng của nó và các quy trình khác bắt đầu. Mức độ ưu tiên hiện tại được tạo thành từ mức độ ưu tiên cơ bản và một số yếu tố quyết định liệu nó có nên được tăng hay không - ở phía trước không nhất thiết phải tăng mức độ ưu tiên, nhưng những việc như thoát khỏi trạng thái chờ đợi hoặc thực hiện một số IO có thể tăng tạm thời ngắn

Tôi sẽ đề nghị rằng việc chạy quy trình Excel của bạn với mức độ ưu tiên cao khi làm việc trên các sổ làm việc rất chuyên sâu này có thể có ý nghĩa và tôi sẽ nói một lối tắt thứ hai có tên là "Excel ưu tiên cao" có thể là một cách tốt để làm điều này. Trước tiên, tạo một tệp bó một dòng chạy lệnh start với các công tắc thích hợp, ví dụ:

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

(trên phiên bản Windows 64 bit sẽ như vậy start "high priority excel" /max /high "C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE"trừ khi bạn cũng đang chạy phiên bản Office 64 bit, chỉ có sẵn cho năm 2010 trở đi start "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE") Lưu ý rằng tiêu đề cho cửa sổ có thể là bất cứ thứ gì bạn thích, nhưng không phải là tùy chọn.

Bây giờ hãy lưu cái này như ví dụ HiperExcel.cmd ở đâu đó tiện dụng - có thể là thư mục văn phòng hoặc thư mục ac: \ scripts hoặc somesuch hoặc thư mục nhà của bạn để điều này có thể chuyển vùng từ máy sang máy. Tạo một lối tắt mới trỏ đến tệp này, tạo thư mục bắt đầu thư mục lưu giữ tệp. Chọn một biểu tượng cho tệp - duyệt đến tệp thực thi Excel.exe sau đó chọn một biểu tượng khác ngoài biểu tượng Excel thông thường để rõ ràng.

Nhấp vào lối tắt mới của bạn và nó sẽ gọi Excel chạy như một quy trình ưu tiên cao, với mức ưu tiên cơ bản là 13 và khi chạy, nó có thể sẽ được ưu tiên tối đa cho các quy trình không theo thời gian thực là 15. Ngay cả khi một thứ khác được tăng cường, nó không nên được ưu tiên cao hơn Lưu ý rằng quá trình tiền cảnh KHÔNG được tăng mức ưu tiên chỉ khi ở trong nền trước (không kể từ NT4.0). Vậy chuyện gì đang xảy ra thế?

Giới hạn lại những gì chúng ta biết cho đến nay: Các quy trình được thực hiện lần lượt theo mức độ ưu tiên, nhưng không loại trừ tuyệt đối các quy trình có mức độ ưu tiên thấp hơn (thực sự, các luồng thực sự, nhưng để mọi thứ dễ dàng thảo luận). Điều gì xảy ra khi một quá trình được "bật"? Nó được chạy trong một đơn vị thời gian gọi là lượng tử. Bao lâu là một lượng tử? Nó phụ thuộc ...

Đây là nơi mà quá trình tiền cảnh được sử dụng nhiều tài nguyên hơn - khi nó thực hiện một lượt, lượt đó có thể kéo dài gấp ba lần so với lượt của các quy trình nền. Vì vậy, nó có thể không được đi thường xuyên (tùy thuộc vào mức độ ưu tiên) nhưng khi thực hiện, nó sẽ kéo dài hơn.

Bạn có thể chọn sử dụng lượng tử ngắn hoặc dài (mặc định là ngắn trên hệ điều hành máy trạm, dài trên máy chủ) và để tăng hoặc không xử lý tiền cảnh (biến cho w / s, cố định cho máy chủ theo mặc định) và nếu được tăng, theo bao nhiêu (hiệu quả đến 3 lần). Bây giờ, phần khó khăn của điều này là nếu bạn chọn thay đổi hệ số nhân, bạn sẽ kết thúc với mọi thứ có giá trị rất ngắn cho lượng tử, trong khi nếu bạn vô hiệu hóa việc tăng tiền cảnh thì mọi thứ sẽ dài hơn nhưng bằng nhau. Nếu bạn vô hiệu hóa nó, tất nhiên, các dịch vụ windows nền sẽ có cùng lượng tử như các ứng dụng người dùng của bạn, điều này có thể không lý tưởng. Bạn cần đặt giá trị trong sổ đăng ký tại: HKLM \ System \ CurrentControlset \ Control \ PriorityControl \ Win32P WarrioritySpayation, sử dụng mặt nạ bit. Để làm cho mọi thứ dễ dàng hơn, các giá trị rất có thể bạn muốn là:

2 = giá trị mặc định, có nghĩa là sử dụng mặc định với mức tăng tối đa. mặc định trên máy trạm O / S là ngắn và thay đổi. 8 = cố định, lượng tử ngắn (tiền cảnh và nền bằng nhau) 40 (thập phân, x28 hex) = cố định và dài (điều này giống như mặc định của máy chủ) 36 (thập phân, x24 hex) = ngắn, tăng nhưng thay đổi tối thiểu cho quá trình tiền cảnh . Tôi nghĩ rằng đây là ứng dụng có thể mang lại cho bạn nhiều lợi ích nhất để giảm số lượng mà các ứng dụng khác cạnh tranh, nhưng cho phép Excel có được nhiều tài nguyên hơn khi ở phía trước (miễn là bạn cũng tăng mức độ ưu tiên của nó).

Hãy thử và xem, tôi hy vọng điều này sẽ giúp - số dặm của bạn có thể thay đổi tất nhiên.

Ngoài ra: Rất nhiều ứng dụng hoặc quy trình khác không có CPU là nút cổ chai của chúng - ví dụ về đồng bộ hóa Outlook và trình duyệt IE của bạn có thể có mạng và có thể đối với Outlook một số đĩa IO là yếu tố quan trọng hơn về tốc độ của chúng, vì vậy chúng có nhận được tiền cảnh tăng hay không, tác động trong hiệu suất có thể nhìn thấy có thể thấp hơn những gì bạn có thể thấy bằng cách quan sát đơn giản.


1
Về cơ bảnMoney.com chỉ ra cách thay đổi cài đặt cho các quy tắc lượng tử thông qua gui XP, nhưng sửa lỗi khóa đăng ký vẫn giống với HĐH từ NT4 đến Windows 7 nên nói chung hơn. Cài đặt "Dịch vụ nền" giống như cài đặt 'cố định'. Và lưu ý, đây không phải là mức tăng ưu tiên, nó thay đổi độ dài của 'thời gian' mà mỗi quy trình đạt được. Ưu tiên là một tài sản độc lập và không được tăng cường bằng cách ở phía trước.
AdamV

1

Không có vấn đề gì với việc tăng mức độ ưu tiên của quá trình lên "trên mức bình thường" hoặc "cao", chỉ cần không đặt nó thành "thời gian thực". Không thể giúp bạn với Excel đặc biệt xin lỗi.


1

Có thể thao tác ưu tiên đang được thực hiện không phải bởi Excel, mà bởi chính Windows. Windows có một cơ chế trong đó mức độ ưu tiên của các tiến trình với các cửa sổ ở phía trước được tăng cường; vì vậy, khi Excel mất tiêu điểm, mức độ ưu tiên của nó sẽ trở lại bình thường (thấp hơn một chút).

Trang duy nhất trên MSDN tôi có thể tìm thấy về điều này với một tìm kiếm nhanh là Boost Priority :

Khi một quy trình sử dụng NORMAL_PRIORITY_CLASSđược đưa lên nền trước, bộ lập lịch sẽ tăng lớp ưu tiên của quy trình được liên kết với cửa sổ nền trước, để nó lớn hơn hoặc bằng với mức ưu tiên của bất kỳ quy trình nền nào. Lớp ưu tiên trở về thiết lập ban đầu của nó khi quá trình không còn ở phía trước.

Từ những gì tôi đã nghe, có nhiều cách để vô hiệu hóa mức tăng ưu tiên đó.


Tôi không chắc về điều này. Nếu đó là như vậy thì tôi sẽ mong các ứng dụng khác sẽ chậm đi đáng kể khi chúng không tập trung. Nhưng tôi không nhận thấy bất kỳ sự chậm lại nào, giả sử, Outlook nếu nó đang đồng bộ hóa email khi tiêu điểm nằm trên trình duyệt web hoặc thậm chí là chậm trong trình duyệt của tôi tải một trang nếu tôi tập trung vào cửa sổ Excel.
Joe Schmoe

1
Và các crunchers số như các nhiệm vụ BOINC chạy ở mức ưu tiên thấp trong nền nhưng vẫn tận dụng tối đa dung lượng CPU dự phòng có sẵn.
Alistair Knock

Trang MSDN đó đang mô tả hành vi cũ, thậm chí cổ xưa.
Jamie Hanrahan

0

Chỉ cần thử điều này, nó đã làm việc cho tôi.

Cách không hay lắm, nhưng thực ra nó chỉ tăng gấp đôi tốc độ tính toán của tôi! Kinh ngạc! (nhưng tôi sẽ kiểm tra kết quả, không chắc chắn về chúng ...)

Biểu mẫu người dùng của bạn phải ở giữa màn hình trong 1024 * 768. Nó chỉ cần gửi bằng phần mềm một cú nhấp chuột phải vào biểu mẫu người dùng.

Tính toán đầy đủ, nhưng không sử dụng máy tính của bạn trong khi máy tính tính toán (khởi chạy các chương trình khác, windows ..).

Chỉ cần thử và cho tôi biết làm thế nào nó làm việc cho bạn!

'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

Sau một đêm dài tính toán tốc độ đầy đủ, và sau khi kiểm tra, kết quả sáng nay đã ... hoàn toàn sai.

Vì vậy, tôi nghĩ rằng đó chỉ là một lỗi, các tính toán không được thực hiện đúng.

Nhấp vào biểu mẫu người dùng trong tính toán chỉ giúp tăng tốc độ xử lý, nhưng không tính toán lại đầy đủ trang tính bên ngoài. Tôi chính xác tôi đã ở trong thời gian thực với tiên sinh.

Một điều tuyệt vời nữa là điều chỉnh tác vụ xử lý với prô_x64_199_2367.exe, http://softziz.com/2010/11/prio-64-bit-1-9-9/

Điều này lưu mức ưu tiên quy trình của bạn được xác định bằng CTRL ALT DEL, bên trong trình quản lý tác vụ, cho các lần sử dụng sau.

Trân trọng,

John

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.