Batasi Penggunaan CPU Excel

31

Apakah ada cara untuk membatasi berapa banyak penggunaan CPU yang dapat diakses oleh excel? Saya memiliki skrip VBA yang menghitung sekelompok rumus array raksasa. Seluruh perhitungan mungkin memakan waktu 20 menit menggunakan 100% dari CPU saya, tetapi saya tidak dapat menggunakan mesin saya selama ini dan lebih suka menjalankannya di latar belakang seperti 50% penggunaan CPU sehingga saya dapat terus melakukan hal-hal lain. Ada saran?

OS saya adalah Windows 7 Enterprise 64-bit dan versi Excel 2007-32 bit

belajar Asigo
sumber
1
Windows? Versi yang mana?
DavidPostill
Windows 7. Saya akan menambahkannya ke posting
learningAsIGo
8
Dapatkan CPU multicore? Jika Anda sudah memiliki satu (siapa yang tidak?) Dan Excel menggunakan semua inti (yang saya tidak tahu Excel bisa lakukan), kemudian atur afinitasnya di Task Manager.
user253751
2
Ini tidak menjawab pertanyaan, tetapi pastikan Anda mematikan pembaruan jendela sebelum mulai menghitung dan memperbarui ribuan sel. Jika Anda memiliki grafik, matikan juga. VBA lambat, tetapi ketika benar - benar lambat maka biasanya salah satu atau keduanya yang harus disalahkan.
Coxy
1
@ kucing: Tidak, penggunaan CPU 100% di Windows Task Manager berarti 100% di semua prosesor logis. Jika hanya satu inti yang diisi maka akan menjadi 25% (pada dual core umum dengan hyper threading) atau ~ 36% (turbo boosting).
Martheen Cahya Paulo

Jawaban:

54

Jika fungsi VBA dipanggil dari beberapa rumus atau jika skrip Anda menghasilkan atau memaksa penghitungan ulang beberapa rumus, maka ini pasti harus menggunakan fitur perhitungan multi-threaded Excel. Masing-masing, ini akan menjalankan beberapa contoh fungsi VBA Anda untuk setiap formula, atau menghitung ulang beberapa sel secara bersamaan saat skrip vba Anda berjalan di satu utas.

Anda dapat membatasi jumlah utas yang digunakan oleh Excel untuk menghitung ulang rumus di Opsi Excel ... Tab Lanjut ... bagian Rumus.

masukkan deskripsi gambar di sini

mtone
sumber
Sub VBA bukan masalah, itu rumus array excel yang dihasilkan kode VBA.
learningAsIGo
@learningAsIGo Benar, saya menyederhanakan jawaban saya. Beri tahu kami apakah pengaturan jumlah utas ke 1 membantu.
mtone
1
Ini sepertinya telah melakukan trik. Saya mengaturnya menjadi 3 core dan maks pada 75% CPU meninggalkan saya banyak ruang untuk melakukan hal-hal lain. Terima kasih!
learningAsIGo
27

Alih-alih menurunkan prioritas, coba ubah afinitas di Task Manager. Jika Anda memiliki lebih dari 1 CPU, Anda dapat membatasi jumlah CPU yang akan digunakan Excel. Ini akan membebaskan CPU lain untuk mengerjakan hal-hal lain.

Klik kanan Excel di tab Processes dan pilih Set Affinity. Pilih CPU di mana Anda ingin Excel dijalankan.

B540Glenn
sumber
3
Perhatikan bahwa untuk afinitas, Windows juga mempertimbangkan setiap inti CPU. (Jadi ini akan berhasil jika Anda memiliki dual atau quad core.)
jpmc26
1
Nah jika berbicara secara khusus tentang core, mengapa tidak menggunakan thread HyperThreading? Mereka juga CPU logis yang berbeda. Yaitu CPU quad-core dengan HT akan memiliki 8 CPU logis.
Ruslan
Saya melakukan ini setiap saat ketika menjalankan HandBrake dan hanya ingin menjelajah internet selama satu jam tanpa menghentikan atau menghentikan proses transcoding. Saya pikir akan bermanfaat untuk menyebutkan bahwa setelah beberapa waktu, core-core tersebut dilepaskan kembali ke program dan afinitasnya "diatur ulang", paling tidak itu terjadi pada saya dengan rem tangan.
MonkeyZeus
2
@MonkeyZeus Biasanya, afinitas tidak disimpan ketika proses keluar. Ini hanya berlaku untuk proses yang sedang berjalan. Bisa jadi HandBrake memunculkan proses baru sendiri atau Anda memulai yang baru.
jpmc26
@ jpmc26 Senang tahu! Saya jelas tidak memulai proses baru sendiri sehingga harus memunculkannya sendiri.
MonkeyZeus
7

Anda dapat mencoba menurunkan prioritas proses excel, dengan menemukan membuka task manager, beralih ke tab "Detail" atau "Proses" (tergantung pada versi Windows Anda), mengklik kanan pada proses excel.exe, dan memilih prioritas yang lebih rendah. Ini akan memberi lebih banyak waktu CPU untuk proses lain.

Selat Slithy
sumber
1
Tampaknya tidak berfungsi: Saya menetapkan prioritas ke sangat rendah dan masih tertinggal komputer.
learningAsIGo
1
Mungkin mencoba meningkatkan prioritas browser web Anda, atau apa pun yang Anda coba lakukan pada saat bersamaan, juga? Saya menemukan diskusi ini tentang seberapa efektif perubahan prioritas .
Slithy Toves
3
@ SlithyToves: Itu benar-benar tidak masalah. Prioritas menentukan program mana yang mendapatkan CPU, jika ada banyak kandidat. Mengatur Excel ke sangat rendah berarti hanya mendapat irisan CPU ketika semua program lain selesai. Namun, ketika Excel tidak mendapatkan sepotong CPU, tidak akan menyerah slice itu. Ini hanya akan kehilangan persaingan untuk slice waktu CPU berikutnya.
MSalters
3

Ada fungsi Tidur dan Tunggu yang tersedia di VBA atau melalui deklarasi. Namun, "aturan praktis yang terlalu sederhana" adalah untuk tidak pernah menggunakan Sleep (). (google '"never use sleep ()" programming')

Halaman dokumen untuk Application.Wait ( https://msdn.microsoft.com/en-us/library/office/ff822851.aspx ). Perhatikan bahwa Tidur dan Tunggu akan menyebabkan Excel menjadi tidak responsif selama durasi yang Anda tentukan dan ini dapat menyebabkan irisan waktu "kereta bangkai."

Jika perhitungan Anda melibatkan semacam loop, maka salah satu cara untuk menangani ini untuk tujuan spesifik Anda (waktu perhitungan hangus untuk ketersediaan CPU) adalah dengan membuat fungsi tunggu khusus Anda sendiri, misalnya, loop DoEvents () selama 1 detik dan lalu kembali.

DoEvents pada dasarnya memberi tahu kode / juru bahasa Anda untuk memberikan waktu untuk OS, dll. Ini pasti akan menyebabkan kode Anda lebih lama. Mungkin juga Anda dapat mengedit lembar kerja saat perhitungan sedang berlangsung, sehingga jarak tempuh Anda mungkin berbeda. Uji.

Lihat, misalnya, https://stackoverflow.com/questions/469347/is-there-an-equivalent-to-thread-sleep-in-vba

Yorik
sumber
0

Saya memiliki masalah yang sama ketika laptop saya memiliki memori 4GB. Segera setelah saya ditingkatkan ke 16GB, masalahnya berhenti. Hanya solusi lain yang mungkin.

RPh_Coder
sumber
0

Tambahkan 2 baris berikut di suatu tempat di dekat awal makro Anda:

'Turn off screen updating

 Application.ScreenUpdating = False

Dan 2 baris ini mendekati akhir:

'Turn screen updating back on

 Application.ScreenUpdating = True

Maka akan lebih sedikit pekerjaan yang harus dilakukan saat Anda melakukan sesuatu yang lain.

Yg terkulai
sumber
-2

Jika Anda menggunakan kantor 32bi dalam OS 64bit, Anda harus menggunakan aplikasi ini: http://www.ntcore.com/4gb_patch.php

Aplikasi ini akan memungkinkan excel atau kantor 32bit lainnya untuk menggunakan mo

diasje
sumber
Pertanyaannya adalah tentang membatasi CPU, jawaban Anda adalah tentang mengaktifkan AWE pada aplikasi yang mungkin bahkan tidak akan mengambil keuntungan dari AWE.
Martheen Cahya Paulo
-5

Gunakan OpenOffice atau LibreOffice: kekuatan skripnya jauh lebih efektif daripada MS, dan Anda benar-benar dapat memiliki "throttle" dalam perhitungan Anda.

EDIT: Mengapa downvote? lihat manual dan lihat sendiri. Anda dapat mengubah perhitungan Anda menjadi Java dan baik - baik saja dengan semua kekuatan pelambatan JVM, misalnya.

Alexey Vesnin
sumber
3
Saya tidak mengundurkan diri, tetapi saya berasumsi itu karena Anda mengusulkan solusi dan bukan solusi untuk pertanyaan langsung yang diajukan dalam OP: "Apakah ada cara untuk membatasi seberapa banyak penggunaan CPU yang dapat diakses oleh excel saat menjalankan? "
Monkpit
@Monkpit cerita saya dengan OpenOffice telah dimulai dari masalah yang sama, portasi memakan waktu kira-kira seminggu untuk semua dokumen yang kami miliki, tapi setelah itu saya membuat pendapat, bahwa saya tidak akan pernah menggunakan MS Office lagi.
Alexey Vesnin
OpenOffice jauh lebih unggul daripada Office karena 99% orang akan menggunakan Office lebih dari Libre, jadi pengembang (mungkin seperti orang ini). Itu sebabnya saya kalah.
Thomas Shera
@ Thomas Soa Yah, saya tidak bisa mengerti sama sekali - mengapa selama bertahun-tahun Microsoft tidak bisa memperbaiki hal-hal seperti itu ? Tidak, tidak perlu barang baru, tidak ada tambahan - buat saja produk Anda benar-benar berfungsi ...
Alexey Vesnin