Microsoft Excel'in pencere odağı olmasa bile tam hızda çalışmasını nasıl sağlarsınız?


10

Excel 2007'nin (ve muhtemelen daha önceki sürümlerin) pencere odağı olduğunda, Excel'in tam hızda çalıştığı ve dosyaların hızlı açıldığı ve uzun süre çalışan VBA makrolarının hızla yürütüldüğü anlamına geldiğini fark ettim.

Excel penceresi odağı kaybederse, Excel'in iş parçacığı önceliği önemli ölçüde düşer ve odağı yavaşça açtığınızda açılan büyük dosyalar ve karmaşık VBA makrolarının tamamlanması uzun zaman alır.

Odaklanıp odaklanmadığına bakılmaksızın Excel önceliğini yüksek tutmanın bir yolu var mı?

Görev Yöneticisi aracılığıyla iş parçacığı önceliğini yapay olarak artırabileceğimi biliyorum, ancak bunun elektronik tablolarım veya işletim sistemim için hangi vuruş efektleri olabileceğinden emin değilim.

Sistemim 4Gb RAM ile hızlı bir Çift Çekirdekli ve Vista 64 kullanıyor.

AÇIKLAMAYI DÜZENLEME:

Benim sorunum sadece Görev Yöneticisi aracılığıyla Excel işleminin önceliğini yükseltmekle ilgili değil, çünkü bu sadece pencereye odaklandığında Excel'i etkiler.

Nokta, Excel pencere odağını kaybettiğinde ne olduğudur.

Excel'i kapsamlı bir şekilde kullanmaktan, tasarım gereği , Excel penceresi odak olmadığında kendi işlem önceliğini kasten düşürdüğü anlaşılmaktadır .

Excel işlemi için daha yüksek bir öncelik belirlemek, bunun olmasını engellemez - Excel'e yalnızca odağı olduğunda daha yüksek bir işlem önceliği verir, ancak odağı kaybettiğinde hala önemli ölçüde düşer.

Normal Excel kullanımında (muhtemelen kullanan herkesin% 99'u), bu etkiyi fark etmezsiniz, ancak büyük bir elektronik tablo (2000 çalışma sayfası, sanırım) ve yürütülmesi birkaç dakika süren karmaşık VBA Makroları ile, etki çok farkedilebilir.

İdeal olarak, Excel penceresinin odaklanmış olup olmadığına bakılmaksızın aynı iş parçacığı önceliğini korumak için buna ihtiyacım var.

Şimdiye kadar, işlem sırasında bilgisayardan birkaç dakika önce oturuyordum, böylece çatırtıldığında yanlışlıkla Excel penceresini tıklamıyorum, ancak daha iyi bir çözüm olduğunu umuyordum ... belki de bir tür kayıt defteri kesmek?

DÜZENLE:

Şimdiye kadar bu bağlantıda net olarak bu konunun başka bir sözünü buldum

Bu ilgili alıntı ...

Ancak, Excel 2000 penceresini kullanıcı için görünür yapar ve pencereyi odakta tutarsam, makrolar beklenen hızlarında yürütülür. Yine, pencerenin odağı olmalıdır veya makro tekrar taramayı yavaşlatır.


İyi soru. Bu da benim için rahatsız edici bir 'özellik' olduğunu kanıtladı ve hala gerçek bir çözüm yok ...
Noldorin

Bir kaynak için rekabet eden birkaç iş parçacığı olmadığı sürece iş parçacığı önceliğinin performans üzerinde hiçbir etkisi yoktur - bu durumda daha yüksek öncelikli turtanın ilk dilimini alır. Excel'i uzun zamandır kullanmadım, ancak arka plandayken kendini daraltıyor olabilir veya Windows'un biraz geciktirilmiş takas mekaniğine kurban olabilirsiniz.
Mark K Cowan

Bu, uzun VBA komut dosyaları çalıştırıldığında tüm Office 2007 programlarında olur. Bir keresinde excel veri alan ve Word formlarına yerleştiren bir senaryo yazdım. Word programını saklarsam, dışlama bir taramaya düştü. Programın gösterilmesine izin verirsem, komut dosyası ~ 10 kat daha hızlıydı.
wbeard52

Yanıtlar:


6

Windows sunucu olmayan sürümleri, varsayılan olarak, ön plan işlemine öncelikli bir destek sağlar. Excel'i arka plana ittiğinizde, daha önce ön planda olduğu eklentiyi kaybeder; bunun yerine başka bir program öncelik artışını sağlar.

Programların artık bu desteği almaması için bir ayarı değiştirebilirsiniz. Not: Bu yalnızca Excel'i etkilemez, ancak bir yükseltme için uygun olabilecek herhangi bir programı da etkiler.

Windows XP'de ayarın nasıl yapılacağı aşağıda açıklanmıştır:

  1. Bilgisayarım'a sağ tıklayın .
  2. Özellikler'i seçin .
  3. Click Gelişmiş sekmesini.
  4. Gelen Performans paneli tıklayın Ayarlar düğmesine basın.
  5. Click Gelişmiş sekmesini. İlk panel İşlemci Zamanlaması :

    İşlemci Zamanlama paneli

  6. Varsayılan olarak "Programlar" yerine "Arka plan hizmetleri" olarak değiştirin ve Excel'in arka planda olduğunda istediğiniz şekilde daha yakın davranmasına neden olmalıdır.


Bunu yapmanın, arka plan uygulamaları ve hizmetleri aniden bir şey yapmak istediklerine karar verdiğinde ön plan programlarının genellikle yavaş görüneceğini unutmayın.
Mark K Cowan

"Windows sunucu olmayan sürümleri, varsayılan olarak, ön plan işlemine öncelikli bir destek sağlar." Hayır. (Windows NT 4'ten önce yaptılar, ama bu çok uzun zaman önceydi.) Yaptıkları şey, diğer işlemler için zaman dilimi (90 ms vs 30) kadar ön plan işlemi için zaman dilimini 3 kat yapmaktır. Beklemeyi çözdüğünde, bir ön plan işlemindeki herhangi bir iş parçacığına uygulanan +2 öncelik artışı da vardır. Burada sunulan çözümle ilgili sorun, zaman diliminin 180 ms daha uzun olmasına neden olmasıdır. Bu, UI-yoğun uygulamaların yanıt verme hızına önemli ölçüde zarar verebilir.
Jamie Hanrahan

4

Sizin durumunuzda Excel işlem önceliğini Normalin Üstü olarak değiştirmeyle ilgili bir sorun olduğunu düşünmüyorum . Sorun olmamalı.

Sistem süreçleriyle rekabet edeceği en yüksek seviyeye getirmeyin .
Etmeyin askıya onu, yoksa üzerine askıya başka şeyler olabilir!


Eğer kullanırsanız Mark Russinovich 'ın Süreci Explorer
sisteminizde çalışan işlemlerin öncelikleri bakmak için.
Aşağıdaki öncelik değerlerini ve ilişkilerini gösterir.

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

İşlem gezginini kullanabilir ve Excel için yeniden önceliklendirmeyi deneyebilirsiniz .
Yukarıda Taşı 8 , fakat öte gitmez 12
Üstü Normal olarak 10 yapmalıyım sanırım.

Bazı süreç çok fazla işlemci zamanı değil odakta iken kaplıyor düşünüyorsanız Aynı doğrultuda, sen doğru yukarı önceliğini düşürebileceğini Idle .
Bunun için genellikle bu tekniği kullanırım.


Ancak Excel'in odağı olmadığında öncelik yine de düşecek, değil mi? ... sanırım öncekinden biraz daha yüksek bir öncelik seviyesine. Pencere odağından bağımsız olarak iplik önceliğini nasıl tutarlı tutacağınızı biliyor musunuz?
Joe Schmoe

Ben ambu detay arayan, ama zihnimin odakta pencere genellikle en olacağıdır Normal(varsayılan olarak) öncelik ve hareket kez Excelkarşı Above Normalöncelik, bu odaklanmış penceresinden daha yüksek öncelikte çalıştırılmalıdır. Ancak, daha düşük öncelikli olarak, sistem işlemektedir - olmasını istediğiniz yer burası.
nik

Söylediklerinizi yanlış anlayamadıkça, imalarınız Excel sürecinin önceliğini yükseltebileceğiniz ve her zaman bu öncelikte kalacağıdır. Ancak Excel'i kapsamlı bir şekilde kullanmaktan, bunu yapmadığını güvenle söyleyebilirim. Görünüşe göre, TASARIM İLE, Excel penceresi odak olmadığında kendi önceliğini düşürür. Excel işlemi için daha yüksek bir öncelik belirlemek, bunun olmasını engellemez - Excel'e sadece odak olduğunda daha yüksek bir işlem önceliği verir, ancak odağı kaybettiğinde hala önemli ölçüde düşer. Bunu onaylamak için sadece bir test yap.
Joe Schmoe

Ben şaşırdım. Yine de, bu tekniği süreç önceliklerini yükseltmek için kullanmadım (sadece azaltmak için).
nik

Sürmekte olan bu kasıtlı süreç düşürmeyi vurgulamak için soruya biraz daha bilgi ekledim. İdeal olarak, bunun olmasını engelleyecek bir tür kayıt defteri kesmek olurdu.
Joe Schmoe

3

Burada dikkate alınması gereken birkaç farklı nokta vardır: Bir işlemin önceliğini değiştirdiğinizde, bu temel öncelik tüm iş parçacıkları ve başladığı diğer işlemler tarafından devralınır. Mevcut öncelik temel öncelikten oluşur ve artırılıp artırılmayacağını belirleyen bir dizi faktör vardır - ön planda olmak kendi başına önceliği artırmaz, ancak bekleme durumundan çıkmak veya bazı ES'leri yapmak gibi şeyler olabilir kısa süreli geçici destek vermek.

Bu çok yoğun çalışma kitaplarında çalışırken Excel işleminizi yüksek bir öncelikle çalıştırmanın mantıklı olabileceğini ve "Yüksek öncelikli Excel" adlı ikinci bir kısayolun bunu yapmanın iyi bir yolu olduğunu söyleyebilirim. İlk olarak, uygun komutlarla start komutunu çalıştıran tek satırlı bir toplu iş dosyası yapın, örneğin:

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

(Windows'un start "high priority excel" /max /high "C:\Program Files (x86)\Microsoft Office\Office12\EXCEL.EXE"64 bit sürümünde, yalnızca 2010'dan itibaren kullanılabilen 64 bit Office sürümünü çalıştırmadığınız sürece bu olurdu start "high priority excel" /max /high "C:\Program Files\Microsoft Office\Office14\EXCEL.EXE") Pencerenin başlığının istediğiniz gibi olabileceğini, ancak isteğe bağlı olmadığını unutmayın.

Şimdi bunu örneğin HiperExcel.cmd gibi kullanışlı bir yere kaydedin - belki ofis klasörü veya ac: \ scripts klasörü veya somesuch veya ana klasörünüz, böylece form makinesini makineye dolaştırabilirsiniz. Bu dosyayı işaret eden yeni bir kısayol oluşturun, başlangıç ​​klasörünü dosyanın tutulduğu klasör yapın. Dosya için bir simge seçin - Excel.exe yürütülebilir dosyasına göz atın, ardından netlik için normal Excel simgesinden başka bir şey seçin .

Yeni kısayolunuzu tıkladığınızda Excel, 13 temel temel önceliğiyle yüksek öncelikli bir işlem olarak çalıştırılır ve çalıştırıldığında, gerçek zamanlı olmayan işlemler için maksimum önceliği alır. 15 Başka bir şey desteklenirse bile, daha yüksek önceliğe sahip olmamalıdır. Ön plan işleminin yalnızca ön planda olduğu için (NT4.0'dan beri değil) bir öncelik artışı OLMADIĞINI unutmayın. Peki ne oluyor?

Şimdiye kadar bildiklerimizi yeniden ele alın: Süreçler önceliğe göre sırayla gelir, ancak düşük öncelikli süreçlerin mutlak olarak dışlanmasına değil (gerçekten, iş parçacıkları, ancak tartışma kolaylığı için işleri süreçlerde tutmaya izin verir). Bir süreç "dönüşünü" aldığında ne olur? Kuantum denilen bir zaman birimi için koşar. Bir kuantum ne kadar sürer? Değişir...

Bu, ön plan işleminin daha fazla kaynağı kullanmaya başladığı yerdir - bir dönüş elde ettiğinde, bu dönüş arka plan işlemlerinin dönüşlerinden üç kat daha uzun sürebilir. Bu yüzden çok sık gitmeyebilir (önceliğe bağlı olarak), ancak gerçekleştiğinde daha uzun süre kalır.

Kısa veya uzun kuantumlar kullanmayı (varsayılan olarak iş istasyonu işletim sisteminde kısa, sunucularda uzun) ve ön plan işleminin artırılıp artırılmamasını seçebilirsiniz (w / s için değişken, varsayılan olarak sunucular için sabittir) ve artırılmışsa, ne kadar (etkili bir şekilde 3 kata kadar). Şimdi, bunun hileli kısmı, çarpanı değiştirmeyi seçerseniz, her şeyi kuantum için çok kısa değerlere sahip olursunuz, oysa ön planı güçlendirmeyi devre dışı bırakırsanız her şey daha uzun ama eşit miktarda olur. Elbette devre dışı bırakırsanız, arka plan windows hizmetleri kullanıcı uygulamalarınızla aynı kuantumu alır ve bu ideal olmayabilir. Kayıt defterinde değeri şu şekilde ayarlamanız gerekir: HKLM \ System \ CurrentControlSet \ Control \ PriorityControl \ Win32PrioritySeparation, bir bit maskesi kullanarak. İşleri kolaylaştırmak için, isteyebileceğiniz en olası değerler şunlardır:

2 = varsayılan değer, maksimum güçle varsayılanları kullan anlamına gelir. O / S iş istasyonundaki varsayılanlar kısa ve değişkendir. 8 = sabit, kısa kuantum (ön plan ve arka plan eşittir) 40 (ondalık, x28 hex) = sabit ve uzun (bu, sunucu varsayılanlarıyla aynıdır) 36 (ondalık, x24 hex) = kısa, değişken ancak ön plan işlemi için minimum destek . Sanırım bu, muhtemelen diğer uygulamaların rekabet ettiği miktarı azaltmak için en fazla faydayı sağlayacak, ancak Excel'in ön planda olduğunda daha fazla kaynak almasına izin verecek (önceliğini yükselttiğiniz sürece).

Deneyin ve bakın, umarım bu yardımcı olur - kilometreniz elbette değişebilir.

Bir kenara: Diğer birçok uygulama veya işlemin darboğaz olarak CPU'su yoktur - Outlook senkronizasyonu ve IE tarama örnekleriniz muhtemelen ağa sahiptir ve muhtemelen Outlook için bazı disk IO'larını hızlarında daha önemli faktörler olarak görürler. ön plandaki artış ya da değil, görünür performanstaki etki muhtemelen basit gözlemle görebileceğinizin altındadır.


1
BasicallyMoney.com, kuantum kurallarının ayarının XP gui aracılığıyla nasıl değiştirileceğini gösterir, ancak kayıt defteri anahtarı düzeltmesi, NT4'ten Windows 7'ye OS için hala aynıdır, bu nedenle daha geneldir. "Arka plan hizmetleri" ayarı, "sabit" ayarı ile aynıdır. Ve unutmayın, bu bir öncelik artışı değildir, her sürecin aldığı 'zaman diliminin' uzunluğunu değiştirir. Öncelik bağımsız bir mülktür ve ön planda olmakla desteklenmez.
AdamV

1

Bir işlemin önceliğini "normalin üzerinde" veya "yüksek" e yükseltmeyle ilgili bir sorun yoktur, sadece "gerçek zamanlı" olarak ayarlamayın. Excel için özellikle üzgünüm.


1

Öncelikli manipülasyonun Excel tarafından değil, Windows'un kendisi tarafından yapılması mümkündür. Windows, ön planda pencereli işlemlerin önceliğinin artırıldığı bir mekanizmaya sahiptir ; Bu nedenle, Excel odağı kaybettiğinde önceliği normale döner (bu biraz daha düşüktür).

MSDN'de hızlı bir arama ile bulabildiğim tek sayfa Öncelikli Artışlar :

Kullanan bir işlem NORMAL_PRIORITY_CLASSön plana getirildiğinde, zamanlayıcı, ön plan penceresiyle ilişkili işlemin öncelik sınıfını artırır, böylece herhangi bir arka plan işleminin öncelik sınıfından daha büyük veya ona eşit olur. İşlem artık ön planda olmadığında öncelik sınıfı orijinal ayarlarına geri döner.

Duyduğum kadarıyla, bu öncelik artışını devre dışı bırakmanın yolları var.


Bundan emin değilim. Eğer öyleyse, o zaman diğer uygulamaların odaklanmadığında belirgin şekilde yavaşlamasını beklerdim. Ancak, odak, web tarayıcısındayken e-postaları senkronize ediyorsa Outlook'ta herhangi bir yavaşlama, hatta Excel penceresine odaklandığımda tarayıcımda bir sayfa yüklerken bir yavaşlama fark etmiyorum.
Joe Schmoe

1
Ve BOINC görevleri gibi sayı kırıcılar arka planda düşük bir öncelikle çalışır, ancak mevcut yedek CPU kapasitesinden tam olarak yararlanır.
Alistair Vuruntu

Bu MSDN sayfası eski, hatta eski davranışları anlatıyor.
Jamie Hanrahan

0

Sadece dene, benim için çalıştı.

Çok hoş bir yol değil, ama aslında hesaplama hızımı iki katına çıkardı! İnanılmaz! (ama sonuçları kontrol edeceğim, onlardan emin değilim ...)

Kullanıcı formunuz 1024 * 768'de ekranın ortasında olmalıdır. Sadece yazılım tarafından kullanıcı formuna sağ tıklayın.

Tam hesaplama, ancak hesaplarken bilgisayarınızı kullanmayın (diğer programları başlatın, pencereler ..).

Sadece senin için nasıl çalıştığını söyle!

'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

Tam hızda hesaplanan uzun bir geceden sonra ve kontrolden sonra, bu sabah sonuçlar tamamen yanlıştı.

Bence bu sadece bir hata, hesaplamalar düzgün yapılmıyor.

Hesaplamada kullanıcı formuna tıklamak, işlem hızını hızlandırır, ancak sayfayı ötesinde tam olarak yeniden hesaplamaz. Ben prio ile gerçek zamanlı olduğumu kesin.

Başka bir güzel şey, prio_x64_199_2367.exe, http://softziz.com/2010/11/prio-64-bit-1-9-9/ ile işlem görevini değiştirmek.

Bu, ilerideki kullanımlar için görev yöneticisi içindeki CTRL ALT DEL ile tanımlanan işlem önceliğinizi kaydedin.

Saygılarımla,

John

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.