Bagaimana Anda menjaga Microsoft Excel berjalan dengan kecepatan penuh bahkan ketika itu tidak memiliki fokus jendela?

10

Saya perhatikan bahwa ketika Excel 2007 (dan mungkin versi sebelumnya) memiliki fokus jendela, Excel berjalan dengan kecepatan penuh yang berarti bahwa file membuka makro VBA yang cepat dan berjalan lama dijalankan dengan cepat.

Jika jendela Excel kehilangan fokus, prioritas utas Excel tampaknya menurun secara dramatis dan file besar yang dibuka ketika Anda memindahkan fokus terbuka lamban, dan makro VBA kompleks membutuhkan waktu lama untuk diselesaikan.

Apakah ada cara untuk menjaga prioritas Excel tetap tinggi terlepas dari apakah itu fokus atau tidak?

Saya tahu saya dapat meningkatkan prioritas utas secara artifisial melalui Task Manager tetapi saya tidak yakin apa efek knock-on yang mungkin terjadi pada spreadsheet, atau OS saya.

Sistem saya adalah Dual Core cepat dengan RAM 4Gb dan menjalankan Vista 64.

EDIT UNTUK KLARIFIKASI:

Masalah saya bukan hanya tentang meningkatkan prioritas proses Excel melalui Task Manager karena ini hanya mempengaruhi Excel ketika memiliki fokus jendela.

Intinya adalah apa yang terjadi ketika Excel kehilangan fokus jendela.

Dari menggunakan Excel secara luas, tampaknya, secara desain , ia sengaja menurunkan prioritas prosesnya sendiri ketika jendela Excel tidak memiliki fokus.

Menetapkan prioritas yang lebih tinggi untuk proses Excel tidak menghentikan hal ini terjadi - itu hanya memberi Excel prioritas proses yang lebih tinggi ketika memiliki fokus tetapi masih menurun secara dramatis ketika kehilangan fokus.

Dalam penggunaan Excel normal (mungkin 99% dari semua orang yang menggunakannya), Anda tidak akan melihat efek ini tetapi dengan spreadsheet besar (saya kira sekitar 2.000 lembar kerja) dan makro VBA kompleks yang memerlukan beberapa menit untuk dieksekusi, efeknya sangat nyata.

Idealnya, saya membutuhkannya untuk menjaga prioritas utas yang sama terlepas dari apakah jendela Excel terfokus.

Hingga saat ini, saya baru saja duduk dari komputer selama beberapa menit selama pemrosesan sehingga saya tidak secara tidak sengaja mematikan jendela Excel ketika sedang berderak tetapi saya hanya berharap ada solusi yang lebih baik ... mungkin semacam registry hack?

EDIT:

Saya hanya pernah menemukan satu lagi menyebutkan masalah ini di internet di tautan ini

Ini adalah kutipan yang relevan ...

Namun, jika saya membuat jendela Excel 2000 terlihat oleh pengguna dan juga menjaga jendela tetap fokus, makro mengeksekusi dengan kecepatan yang diharapkan. Sekali lagi, jendela harus memiliki fokus atau makro memperlambat untuk merayapi lagi.

Joe Schmoe
sumber
Pertanyaan bagus. Ini juga terbukti menjadi 'fitur' yang menjengkelkan bagi saya, dan masih belum ada solusi nyata ...
Noldorin
Prioritas utas dengan sendirinya tidak berpengaruh pada kinerja kecuali jika ada beberapa utas yang bersaing untuk mendapatkan sumber daya - dalam hal ini, prioritas yang lebih tinggi mendapatkan potongan kue pertama. Saya belum pernah menggunakan Excel untuk waktu yang lama, tetapi mungkin mencekiknya sendiri saat berada di latar belakang, atau Anda mungkin menjadi korban mekanisme pertukaran Windows yang agak terbelakang.
Mark K Cowan
Ini terjadi dengan semua program Office 2007 saat menjalankan skrip VBA panjang. Saya pernah menulis skrip yang mengambil data excel dan menempatkannya ke dalam formulir Word. Jika saya menyembunyikan program Word, eksisi menjadi merangkak. Jika saya membiarkan program ditampilkan, skrip ~ 10x lebih cepat.
wbeard52

Jawaban:

6

Edisi Windows non-server, secara default, memberikan dorongan prioritas untuk proses latar depan. Saat Anda mendorong Excel ke latar belakang, itu kehilangan dorongan yang sebelumnya ada di latar depan; beberapa program lain malah mendapatkan peningkatan prioritas.

Anda dapat mengubah pengaturan agar program tidak lagi mendapatkan peningkatan ini. Catatan: Ini tidak akan memengaruhi Excel saja, tetapi program apa pun yang seharusnya memenuhi syarat untuk peningkatan.

Berikut cara mengubah pengaturan di Windows XP:

  1. Klik kanan Komputer Saya .
  2. Pilih Properti .
  3. Klik tab Advanced .
  4. Di panel Kinerja , klik tombol Pengaturan .
  5. Klik tab Advanced . Panel pertama adalah Penjadwalan Prosesor :

    Panel Penjadwalan Prosesor

  6. Ubahlah dari default "Program" ke "Layanan latar belakang" dan itu akan menyebabkan Excel berperilaku lebih dekat dengan yang Anda inginkan ketika itu di latar belakang.

Chris W. Rea
sumber
Perhatikan bahwa melakukan ini akan membuat program latar depan sering tampak lamban ketika aplikasi dan layanan latar belakang tiba-tiba memutuskan ingin melakukan sesuatu.
Mark K Cowan
"Edisi non-server Windows, secara default, memberikan dorongan prioritas untuk proses latar depan." Tidak, mereka tidak. (Mereka melakukannya sebelum Windows NT 4, tapi itu sudah lama sekali.) Yang mereka lakukan adalah membuat timeslice untuk proses foreground 3x selama timeslice untuk proses lain (90 ms vs 30). Ada juga peningkatan prioritas +2 yang diterapkan ke utas apa pun dalam proses latar depan saat menyelesaikan menunggu. Masalah dengan solusi yang ditawarkan di sini adalah bahwa itu menyebabkan kutu waktu menjadi lebih lama, 180 ms. Ini secara dramatis dapat merusak responsif aplikasi UI-intensif.
Jamie Hanrahan
4

Saya tidak berpikir ada masalah dengan mengubah prioritas proses Excel ke Above Normal dalam kasus Anda. Seharusnya tidak menjadi masalah.

Jangan membuatnya tertinggi , di mana ia akan bersaing dengan proses sistem.
Jangan menangguhkannya , atau Anda dapat menunda-nunda hal lain!


Jika Anda menggunakan Mark Russinovich 's Process Explorer
untuk melihat pada prioritas proses yang berjalan pada sistem Anda.
Ini menunjukkan nilai-nilai prioritas berikut dan hubungannya.

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

Anda bisa menggunakan proses explorer dan mencoba memprioritaskan ulang untuk Excel .
Pindahkan di atas 8 , tetapi jangan melampaui 12
Above Normal di 10 seharusnya, saya harapkan.

Sejalan dengan itu, jika Anda berpikir beberapa proses mengambil terlalu banyak waktu prosesor sementara tidak fokus, Anda dapat menurunkan prioritasnya hingga Idle .
Saya biasanya menggunakan teknik ini untuk itu.

nik
sumber
Tetapi prioritas akan tetap turun ketika Excel tidak memiliki fokus, bukan? ... hanya ke tingkat prioritas yang sedikit lebih tinggi daripada sebelumnya, saya kira. Apakah Anda tahu cara menjaga prioritas utas konsisten terlepas dari fokus jendela?
Joe Schmoe
Saya ammencari detail ini, tetapi pemahaman saya adalah bahwa jendela dalam fokus biasanya akan menjadi Normalprioritas (secara default) dan setelah Anda pindah Excelke Above Normalprioritas, itu harus berjalan pada prioritas yang lebih tinggi daripada jendela fokus. Tapi, pada prioritas yang lebih rendah maka proses sistem - yang mana Anda inginkan.
nik
Kecuali jika saya salah mengerti apa yang Anda katakan, implikasi Anda adalah bahwa Anda dapat meningkatkan prioritas proses Excel dan itu akan tetap pada prioritas itu sepanjang waktu. Tetapi dari menggunakan Excel secara luas, saya dapat mengatakan dengan yakin bahwa itu tidak melakukan itu. Tampaknya, DENGAN DESAIN, bahwa ia menurunkan prioritasnya sendiri ketika jendela Excel tidak memiliki fokus. Menetapkan prioritas yang lebih tinggi untuk proses Excel tidak menghentikan hal ini terjadi - itu hanya memberi Excel prioritas proses yang lebih tinggi ketika memiliki fokus tetapi masih menurun secara dramatis ketika kehilangan fokus. Baru saja menjalankan tes untuk mengonfirmasi ini.
Joe Schmoe
Aku terkejut. Padahal, saya belum menggunakan teknik ini untuk meningkatkan prioritas proses (hanya untuk menurunkannya).
nik
Saya telah menambahkan beberapa informasi lagi ke pertanyaan untuk menyoroti proses penurunan yang disengaja ini yang tampaknya sedang terjadi. Idealnya, akan ada semacam peretasan registri yang akan menghentikan ini terjadi.
Joe Schmoe
3

Ada beberapa hal berbeda untuk dipertimbangkan di sini: Ketika Anda mengubah prioritas suatu proses, prioritas dasar itu diwarisi oleh semua utasnya, dan proses lainnya dimulai. Prioritas saat ini terdiri dari prioritas dasar dan sejumlah faktor yang menentukan apakah harus ditingkatkan atau tidak - berada di latar depan tidak dengan sendirinya meningkatkan prioritas, tetapi hal-hal seperti keluar dari keadaan menunggu atau melakukan beberapa IO dapat berikan dorongan sementara singkat.

Saya menyarankan agar menjalankan proses Excel Anda dengan prioritas tinggi ketika mengerjakan buku kerja yang sangat intensif ini masuk akal, dan saya akan mengatakan pintasan kedua yang disebut "Excel prioritas tinggi" mungkin cara yang baik untuk melakukan ini. Pertama buat file batch satu baris yang menjalankan perintah mulai dengan switch yang sesuai, misalnya:

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

(pada Windows versi 64 bit ini start "high priority excel" /max /high "C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE"kecuali Anda juga menjalankan Office versi 64 bit, yang hanya tersedia untuk tahun 2010 dan seterusnya start "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE"). Perhatikan bahwa judul untuk jendela dapat berupa apa saja yang Anda suka, tetapi bukan opsional.

Sekarang simpan ini sebagai contoh HiperExcel.cmd di tempat yang mudah digunakan - mungkin folder kantor, atau folder ac: \ scripts atau semacamnya, atau folder rumah Anda sehingga ini dapat menjelajah dari mesin ke mesin. Buat pintasan baru yang mengarah ke file ini, buat folder mulai folder tempat file disimpan. Pilih ikon untuk file - browse ke executable Excel.exe lalu pilih sesuatu selain ikon Excel biasa untuk kejelasan.

Klik pintasan baru Anda dan itu akan meminta Excel berjalan sebagai proses prioritas tinggi, dengan prioritas dasar 13 dan ketika menjalankannya mungkin akan mendapatkan prioritas maksimum untuk proses non-real-time dari 15. Bahkan jika sesuatu yang lain mendapat dorongan, seharusnya tidak mendapatkan prioritas yang lebih tinggi. Perhatikan bahwa proses latar depan TIDAK mendapatkan dorongan prioritas hanya karena berada di latar depan (tidak sejak NT4.0). Jadi apa yang terjadi?

Kembalikan apa yang kita ketahui sejauh ini: Proses dapat berubah sesuai dengan prioritas, tetapi tidak dengan pengecualian absolut dari proses dengan prioritas lebih rendah (well, bener benar-benar, tetapi mari kita menjaga segala sesuatunya pada proses untuk kemudahan diskusi). Apa yang terjadi ketika suatu proses mendapatkan "gilirannya"? Itu bisa berjalan untuk satuan waktu yang disebut kuantum. Berapa lama sebuah kuantum? Tergantung...

Di sinilah proses foreground dapat menggunakan lebih banyak sumber daya - ketika ia mendapat giliran, belokan itu bisa bertahan tiga kali lebih lama daripada putaran proses latar belakang. Jadi mungkin tidak terlalu sering (tergantung pada prioritas) tetapi ketika itu terjadi, itu memakannya lebih lama.

Anda dapat memilih untuk menggunakan kuantum pendek atau panjang (standarnya pendek pada OS workstation, panjang pada server), dan untuk meningkatkan proses latar depan atau tidak (variabel untuk b / s, diperbaiki untuk server secara default), dan jika didorong, oleh berapa (efektif hingga 3 kali). Sekarang, bagian yang sulit dari ini adalah bahwa jika Anda memilih untuk mengubah pengali, Anda berakhir dengan segala sesuatu yang memiliki nilai yang sangat pendek untuk kuantum, sedangkan jika Anda menonaktifkan foreground meningkatkan semuanya mendapatkan jumlah yang lebih lama tetapi sama. Jika Anda menonaktifkannya tentu saja, layanan latar belakang windows mendapatkan kuantum yang sama dengan aplikasi pengguna Anda, yang mungkin tidak ideal. Anda perlu mengatur nilai dalam registri di: HKLM \ System \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparation, menggunakan bit mask. Untuk mempermudah, nilai yang paling Anda inginkan adalah:

2 = nilai default, berarti menggunakan default dengan dorongan maksimum. default pada workstation O / S pendek dan variabel. 8 = tetap, kuantum pendek (latar depan dan latar belakang sama) 40 (desimal, x28 hex) = tetap dan panjang (ini sama dengan default server) 36 (desimal, x24 hex) = pendek, variabel tetapi sedikit meningkatkan proses foreground . Saya pikir ini adalah salah satu yang mungkin akan memberi Anda manfaat paling besar untuk mengurangi jumlah yang bersaing aplikasi lain, tetapi memungkinkan Excel untuk mendapatkan lebih banyak sumber daya saat berada di latar depan (selama Anda juga meningkatkan prioritasnya).

Cobalah dan lihat, saya harap ini membantu - jarak tempuh Anda tentu saja bervariasi.

Selain itu: Banyak aplikasi atau proses lain yang tidak memiliki CPU sebagai hambatannya - contoh sinkronisasi Outlook dan penelusuran IE Anda mungkin memiliki jaringan, dan mungkin untuk Outlook beberapa disk IO sebagai faktor yang lebih penting dalam kecepatannya, jadi apakah mereka mendapatkan foreground boost atau tidak, dampak dalam kinerja yang terlihat mungkin di bawah apa yang dapat Anda lihat dengan pengamatan sederhana.

AdamV
sumber
1
BasicallyMoney.com menunjukkan bagaimana mengubah pengaturan untuk aturan kuantum melalui XP gui, tetapi perbaikan kunci registri masih sama untuk OS dari NT4 hingga Windows 7 sehingga lebih umum. Pengaturan "Layanan latar belakang" sama dengan pengaturan 'tetap'. Dan perhatikan, ini bukan dorongan prioritas, ini mengubah panjang 'kutu waktu' yang didapat setiap proses. Prioritas adalah properti independen, dan tidak didorong dengan berada di latar depan.
AdamV
1

Tidak ada masalah dengan meningkatkan prioritas proses ke "di atas normal" atau "tinggi", tapi jangan setel ke "realtime". Tidak dapat membantu Anda dengan Excel secara khusus, maaf.

LachlanG
sumber
1

Ada kemungkinan bahwa manipulasi prioritas sedang dilakukan bukan oleh Excel, tetapi oleh Windows itu sendiri. Windows memiliki mekanisme di mana prioritas proses dengan windows di latar depan ditingkatkan; jadi, ketika Excel kehilangan fokus, prioritasnya kembali normal (yang sedikit lebih rendah).

Satu-satunya halaman di MSDN yang dapat saya temukan tentang ini dengan pencarian cepat adalah Prioritas Prioritas :

Ketika suatu proses yang menggunakan NORMAL_PRIORITY_CLASSdibawa ke latar depan, penjadwal meningkatkan kelas prioritas dari proses yang terkait dengan jendela latar depan, sehingga lebih besar atau sama dengan kelas prioritas dari setiap proses latar belakang. Kelas prioritas kembali ke pengaturan aslinya ketika proses tidak lagi di latar depan.

Dari apa yang saya dengar, ada cara untuk menonaktifkan dorongan prioritas itu.

CesarB
sumber
Saya tidak yakin tentang ini. Jika itu terjadi maka saya akan mengharapkan aplikasi lain melambat ketika mereka tidak fokus. Tapi saya tidak melihat adanya pelambatan di, katakanlah, Outlook jika sedang menyinkronkan email ketika fokusnya adalah pada browser web, atau bahkan perlambatan pada browser saya memuat halaman jika saya fokus pada jendela Excel.
Joe Schmoe
1
Dan pengolah angka seperti tugas-tugas BOINC berjalan pada prioritas rendah di latar belakang namun mengambil keuntungan penuh dari kapasitas CPU cadangan yang tersedia.
Alistair Knock
Halaman MSDN itu menggambarkan perilaku lama, bahkan kuno.
Jamie Hanrahan
0

Coba saja ini, itu berhasil untuk saya.

Cara yang tidak terlalu bagus, tetapi sebenarnya hanya dua kali lipat kecepatan kalkulasi saya! Luar biasa! (tapi saya akan memeriksa hasilnya, tidak yakin tentang mereka ...)

Bentuk pengguna Anda harus di tengah layar di 1024 * 768. Itu hanya mengirim perangkat lunak klik kanan pada formulir pengguna.

Perhitungan penuh, tetapi jangan gunakan komputer Anda saat menghitung (luncurkan program lain, windows ..).

Coba dan beri tahu saya cara kerjanya untuk Anda!

'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`
John
sumber
0

Setelah malam yang panjang perhitungan kecepatan penuh, dan setelah cek, hasilnya pagi ini ... benar-benar salah.

Jadi saya pikir ini hanya bug, perhitungannya tidak dilakukan dengan benar.

Mengklik pada formulir pengguna dalam perhitungan hanya mempercepat kecepatan proses, tetapi tidak sepenuhnya menghitung ulang lembar di luar. Aku tepat berada di Real Time dengan prio.

Hal menyenangkan lainnya adalah mengubah tugas proses dengan prio_x64_199_2367.exe, http://softziz.com/2010/11/prio-64-bit-1-9-9/

Ini menghemat prioritas proses Anda yang didefinisikan dengan CTRL ALT DEL, di dalam task manager, untuk penggunaan di masa mendatang.

Salam,

John

John
sumber