it-swarm-vi.com

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ổ?

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

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 sẽ mất một thời gian 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 4Gb RAM và đang chạy Vista 64.

CHỈNH SỬA ĐỂ XÁC NHẬN:

Vấn đề của tôi không chỉ đơn giản là việc 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ổ.

Điểm chính 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 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?

CHỈNH SỬA:

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.

10
Joe Schmoe

Các phiên bản Windows không phải máy chủ, theo mặc định, cung cấp mức ư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 tinh chỉnh cài đặt trong Windows XP:

  1. Nhấp chuột phải 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ý:

    Processor Scheduling panel

  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.

6
Chris W. Rea

Tôi không nghĩ có vấn đề với việc thay đổi mức ưu tiên của quy trình Excel thành Trên mức 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ỉ, hoặc bạn có thể có những thứ khác bị treo trên đó!


Nếu bạn sử dụng Đánh dấu Russinovich Trình khám phá quy trình
[.___.] để 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ó hiển thị các giá trị ưu tiên sau và liên kết của chúng.

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 process Explorer và thử một số ưu tiên lại cho Excel .
[.__.] Di chuyển nó lên trên 8 , nhưng không vượt quá 12
[.__.] Trên mức bình thường tại 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 tối đa Idle .
[.__.] Tôi thường sử dụng kỹ thuật này cho việc đó.

4
nik

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 thứ 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 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, đây sẽ là 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 c:\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 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 cái gì đó không phải là 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ó mứ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 (tốt, thực sự là các chủ đề, 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 "quay đầu"? 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, bởi bao nhiêu (hiệu quả tới 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 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 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 của bạn và IE duyệt có thể có mạng và có thể cho Outlook một số đĩa IO như các yếu tố quan trọng hơn trong tốc độ của chúng, do đó, cho dù chúng có tăng tiền cảnh hay không, tác động trong hiệu suất có thể nhìn thấy có thể nằm dưới những gì bạn có thể thấy bằng cách quan sát đơn giản.

2
AdamV

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
LachlanG

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ổ trong foreground đượ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à Ưu tiên tăng :

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 đó.

1
CesarB

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 nó 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
John

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 thú vị khác là tinh chỉnh nhiệm 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

0
John