Giới hạn sử dụng CPU Excel


31

Có cách nào để hạn chế lượng excel sử dụng CPU khi truy cập không? Tôi có một tập lệnh VBA tính toán một loạt các công thức mảng khổng lồ. Toàn bộ quá trình tính toán có thể mất 20 phút sử dụng 100% CPU của tôi nhưng tôi không thể sử dụng máy của mình trong thời gian đó và thay vào đó, nó sẽ chạy ở chế độ nền với mức sử dụng CPU 50% để tôi có thể tiếp tục làm những việc khác. Bất kỳ đề xuất?

HĐH của tôi là Windows 7 Enterprise 64 bit và phiên bản Excel là 2007-32 bit


1
Các cửa sổ? Phiên bản nào?
DavidPostill

Windows 7. Tôi sẽ thêm nó vào bài
learningAsIGo

8
Nhận CPU đa lõi? Nếu bạn đã có một (ai không?) Và Excel đang sử dụng tất cả các lõi (mà tôi không biết Excel có thể làm được), thì hãy đặt mối quan hệ của nó trong Trình quản lý tác vụ.
dùng253751

2
Điều này không trả lời câu hỏi, nhưng hãy đảm bảo rằng bạn tắt cập nhật cửa sổ trước khi bắt đầu tính toán và cập nhật hàng nghìn ô. Nếu bạn có bất kỳ biểu đồ nào thì hãy tắt chúng đi. VBA chậm, nhưng khi nó thực sự chậm thì thường là một hoặc cả hai thứ đó để đổ lỗi.
Coxy

1
@cat: Không, việc sử dụng CPU 100% trong Trình quản lý tác vụ Windows có nghĩa là 100% trên tất cả các bộ xử lý logic. Nếu chỉ có một lõi được lấp đầy, nó sẽ là 25% (trên lõi kép chung có siêu phân luồng) hoặc ~ 36% (tăng áp turbo).
Martheen Cahya Paulo

Câu trả lời:


54

Nếu một hàm VBA được gọi từ một số công thức hoặc nếu tập lệnh của bạn tạo hoặc buộc tính toán lại một số công thức, thì điều này chắc chắn sẽ sử dụng tính năng tính toán đa luồng của Excel. Tương ứng, điều này sẽ chạy nhiều phiên bản của hàm VBA cho mỗi công thức hoặc tính toán lại nhiều ô đồng thời trong khi tập lệnh vba của bạn đang chạy trên một luồng.

Bạn có thể giới hạn số lượng chủ đề được Excel sử dụng để tính toán lại các công thức trong Tùy chọn Excel ... Phần nâng cao ... Phần công thức.

nhập mô tả hình ảnh ở đây


Phần phụ VBA không phải là vấn đề, đó là công thức mảng excel mà mã VBA tạo ra.
learningAsIGo

@learningAsIGo Đúng rồi, tôi đơn giản hóa câu trả lời của mình. Hãy cho chúng tôi biết liệu việc đặt số lượng chủ đề thành 1 có giúp ích hay không.
nhạc chuông

1
Điều này dường như đã thực hiện các mẹo. Tôi đặt nó thành 3 lõi và nó đạt tối đa 75% CPU, khiến tôi có nhiều chỗ để làm những việc khác. Cảm ơn!
learningAsIGo

27

Thay vì hạ mức độ ưu tiên, hãy thử thay đổi mối quan hệ trong Trình quản lý tác vụ. Nếu bạn có nhiều hơn 1 CPU, bạn có thể giới hạn số lượng CPU mà Excel sẽ sử dụng. Điều này sẽ giải phóng các CPU khác để làm việc trên những thứ khác.

Bấm chuột phải vào Excel trong tab Quy trình và chọn Đặt mối quan hệ. Chọn (các) CPU nơi bạn muốn Excel chạy.


3
Lưu ý rằng đối với mối quan hệ, Windows cũng coi mỗi lõi là một CPU. (Vì vậy, điều này sẽ hoạt động nếu bạn có lõi kép hoặc lõi tứ.)
jpmc26

1
Vâng, nếu nói cụ thể về lõi, tại sao không phải là chủ đề HyperThreading? Chúng cũng là các CPU logic riêng biệt. Tức là CPU lõi tứ có HT sẽ có 8 CPU logic.
Ruslan

Tôi làm điều này mọi lúc khi chạy HandBrake và chỉ muốn duyệt internet trong một giờ mà không tạm dừng hoặc dừng quá trình chuyển mã. Tôi nghĩ rằng sẽ đáng để đề cập rằng sau một thời gian, các lõi được giải phóng trở lại chương trình và "đặt lại" mối quan hệ, ít nhất nó xảy ra với tôi bằng phanh tay.
MonkeyZeus

2
@MonkeyZeus Thông thường, ái lực không được lưu khi quá trình thoát. Nó chỉ áp dụng cho quá trình hiện đang chạy. Có thể là HandBrake đang tự sinh ra các quy trình mới hoặc bạn đã bắt đầu các quy trình mới.
jpmc26

@ jpmc26 Thật tốt khi biết! Tôi chắc chắn đã không tự mình bắt đầu một quy trình mới vì vậy nó phải tự sinh ra nó.
MonkeyZeus

7

Bạn có thể thử hạ mức độ ưu tiên của quy trình excel, bằng cách tìm mở trình quản lý tác vụ, chuyển sang tab "Chi tiết" hoặc "Quy trình" (tùy thuộc vào phiên bản Windows của bạn), nhấp chuột phải vào quy trình excel.exe và chọn một ưu tiên thấp hơn. Điều này sẽ cung cấp thêm thời gian CPU cho các quá trình khác.


1
Có vẻ như không hoạt động: Tôi đặt mức độ ưu tiên rất thấp và nó vẫn bị chậm máy tính.
learningAsIGo

1
Có thể thử tăng mức độ ưu tiên của trình duyệt web của bạn hoặc bất cứ điều gì bạn đang cố gắng làm cùng một lúc? Tôi tìm thấy cuộc thảo luận này về cách ưu tiên thay đổi hiệu quả .
Slithy Toves

3
@SlithyTove: Điều đó thực sự không quan trọng. Ưu tiên xác định chương trình nào nhận CPU, nếu có nhiều ứng cử viên. Đặt Excel ở mức rất thấp có nghĩa là nó chỉ nhận được một lát CPU khi tất cả các chương trình khác được thực hiện. Tuy nhiên, khi Excel được một lát CPU, nó sẽ không từ bỏ lát đó. Nó sẽ chỉ mất sự cạnh tranh cho lát thời gian CPU tiếp theo.
MSalters

3

Có các chức năng Ngủ và Chờ có sẵn trong VBA hoặc thông qua khai báo. Tuy nhiên, "quy tắc đơn giản quá mức" là không bao giờ sử dụng chế độ Ngủ (). (google '"không bao giờ sử dụng lập trình ngủ ()" lập trình')

Trang tài liệu cho Application.Wait ( https://msdn.microsoft.com/en-us/l Library / office / ff822851.aspx ). Lưu ý rằng Ngủ và Chờ sẽ khiến Excel không phản hồi trong khoảng thời gian bạn chỉ định và điều này có thể gây ra "các vụ đắm tàu".

Nếu tính toán của bạn liên quan đến một vòng lặp nào đó, thì một cách để xử lý việc này cho mục đích cụ thể của bạn (mất thời gian tính toán cho tính khả dụng của CPU) là tạo một hàm chờ đặc biệt của riêng bạn, ví dụ như vòng lặp DoEvents () trong 1 giây và rồi trở về.

DoEvents về cơ bản nói với mã / trình thông dịch của bạn bỏ thời gian cho HĐH, v.v ... Nó chắc chắn sẽ khiến mã của bạn mất nhiều thời gian hơn. Nó cũng có thể cho phép bạn chỉnh sửa bảng tính trong khi tính toán đang diễn ra, do đó, số dặm của bạn có thể thay đổi. Kiểm tra.

Xem, ví dụ: https://stackoverflow.com/questions/469347/is-there-an-equivalent-to-thread-s ngủ-in-vba



0

Tôi gặp vấn đề tương tự khi máy tính xách tay của tôi có bộ nhớ 4GB. Ngay khi tôi nâng cấp lên 16GB, vấn đề đã dừng lại. Chỉ là một giải pháp có thể.


0

Thêm 2 dòng sau vào đâu đó gần điểm bắt đầu của macro của bạn:

'Turn off screen updating

 Application.ScreenUpdating = False

Và 2 dòng này gần cuối:

'Turn screen updating back on

 Application.ScreenUpdating = True

Sau đó, nó sẽ có ít việc phải làm trong khi bạn làm việc khác.


-2

Nếu bạn đang sử dụng văn phòng 32bi trong HĐH 64 bit, bạn nên sử dụng ứng dụng này: http://www.ntcore.com/4gb_patch.php

Ứng dụng này sẽ cho phép excel hoặc bất kỳ văn phòng 32 bit nào khác sử dụng mo


Câu hỏi là về việc giới hạn CPU, câu trả lời của bạn là về việc kích hoạt AWE trên các ứng dụng có thể thậm chí sẽ không tận dụng lợi thế của AWE.
Martheen Cahya Paulo

-5

Sử dụng OpenOffice hoặc LibreScript: sức mạnh kịch bản của nó hiệu quả hơn nhiều so với MS và bạn có thể có một "cú hích" trong các tính toán của mình.

EDIT: Tại sao downvote? hãy xem hướng dẫn và xem cho chính mình. Bạn có thể chuyển đổi các tính toán của mình sang Java và hoàn toàn ổn với tất cả sức mạnh điều chỉnh của JVM.


3
Tôi đã không downvote, nhưng tôi cho rằng đó là vì bạn đã đề xuất một cách giải quyết thay vì giải pháp cho câu hỏi trực tiếp được hỏi trong OP: "Có cách nào để hạn chế mức độ sử dụng CPU mà excel có thể truy cập khi chạy không? "
Monkpit

@Monkpit câu chuyện của tôi với OpenOffice đã bắt đầu từ một vấn đề tương tự, việc chuyển đổi mất khoảng một tuần cho tất cả các tài liệu chúng tôi có, nhưng sau đó tôi đã đưa ra ý kiến, rằng tôi sẽ không bao giờ sử dụng MS Office nữa.
Alexey Vesnin

OpenOffice vượt trội hoàn toàn so với Office vì lý do 99% mọi người sẽ sử dụng Office hơn Libre, vì vậy các nhà phát triển (có thể thích anh chàng này). Đó là lý do tại sao tôi đánh giá thấp.
Thomas Shera

@ThomasShera Chà, tôi hoàn toàn không thể hiểu được - tại sao trong một thời gian dài như vậy, các chàng trai Microsoft không thể sửa chữa những thứ đó ? Không, không có công cụ mới cần thiết, không có addons - chỉ cần làm cho sản phẩm của bạn thực sự hoạt động ...
Alexey Vesnin
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.