Excel CPU Kullanımını Sınırla


31

Çalışırken kaç tane CPU kullanım exceline erişimi olduğunu sınırlamanın bir yolu var mı? Bir sürü dev dizi formülü hesaplayan bir VBA betiğim var. Hesaplama işleminin tamamı, işlemcimin% 100'ünü kullanmak için 20 dakika sürüyor, ancak makinemi o zaman kullanamıyorum ve arka planda% 50 CPU kullanımıyla çalışmasını tercih ediyorum, böylece başka şeyler yapmaya devam edebiliyorum. Baska öneri?

İşletim sistemim Windows 7 Enterprise 64 bit ve Excel sürümü 2007-32 bit


1
Windows® Hangi versiyon?
DavidPostill

Windows 7. Yazıya ekleyeceğim
learningAsIGo

8
Çok çekirdekli bir işlemci mi alıyorsunuz? Zaten bir tane (kim yok?) Kullanıyorsanız ve Excel tüm çekirdeği kullanıyorsa (ki Excel'in yapabileceğini bilmiyordum), Görev Yöneticisi'nde benzerliğini ayarlayın.
kullanıcı253751

2
Bu soruya cevap vermiyor, ancak binlerce hücreyi hesaplamaya ve güncellemeye başlamadan önce pencere güncellemelerini kapattığınızdan emin olun. Herhangi bir çizelgeniz varsa, onları da kapatın. VBA yavaştır, ama gerçekten yavaştığında, o zaman genellikle suçlananlardan biri ya da ikisidir.
Coxy

1
@cat: Hayır, Windows Görev Yöneticisi'nde% 100 CPU kullanımı tüm mantıksal işlemcilerde% 100 anlamına gelir. Yalnızca bir çekirdek doluysa,% 25 (hiper iş parçacıklı ortak bir çift çekirdekte) veya ~% 36 (turbo yükseltme) olacaktır.
Martheen Cahya Paulo

Yanıtlar:


54

Bir VBA işlevi çeşitli formüllerden çağrılırsa veya komut dosyanız birkaç formülün yeniden hesaplanmasını oluşturur veya zorlarsa, bu kesinlikle Excel'in çok iş parçacıklı hesaplama özelliğini kullanmalıdır . Sırasıyla, bu, her formül için VBA işlevinizin birden çok örneğini çalıştırabilir veya vba komut dosyanız tek bir iş parçacığında çalışırken aynı anda birden fazla hücreyi yeniden hesaplar.

Excel Seçenekleri ... Gelişmiş Sekmesi ... Formüller bölümündeki formülleri yeniden hesaplamak için Excel tarafından kullanılan iş parçacıklarının sayısını sınırlayabilirsiniz.

görüntü tanımını buraya girin


VBA alt sorunu değil, VBA kodunun ürettiği excel dizi formülüdür.
öğrenme

@learningAsIGo Doğru, cevabımı basitleştirdim. Konu sayısının 1 olarak ayarlanıp ayarlanmadığını bize bildirin.
mtone

1
Bu hile yapmış gibi görünüyor. 3 çekirdekli olarak ayarlamıştım ve CPU'nun% 75'ini maksimuma çıkardı. Teşekkürler!
öğrenme

27

Önceliği azaltmak yerine, Görev Yöneticisindeki yakınlığı değiştirmeyi deneyin. 1'den fazla CPU'nuz varsa, Excel'in kullanacağı CPU sayısını sınırlayabilirsiniz. Bu, diğer işlemcileri başka şeyler üzerinde çalışmaya zorlayacaktır.

İşlemler sekmesinde Excel'e sağ tıklayın ve Benzeşim Ayarla'yı seçin. Excel'in çalışmasını istediğiniz CPU'ları seçin.


3
Benzeşim açısından, Windows'un her çekirdeği de bir CPU olarak gördüğünü unutmayın. (Bu yüzden çift veya dört çekirdekli bir çekirdek varsa bu işe yarar.)
jpmc26

1
Peki, özellikle çekirdeklerden bahsediyorsanız, neden HyperThreading dişleri olmasın? Ayrıca, farklı mantıksal işlemcilerdir. Yani HT'li dört çekirdekli bir işlemci 8 mantıksal CPU'ya sahip olacaktır.
Ruslan

HandBrake'i çalıştırırken bunu her zaman yapıyorum ve sadece kod dönüştürme işlemini duraklatmadan veya durdurmadan bir saat boyunca internette gezinmek istiyorum. Bir süre sonra çekirdeklerin programa geri döndüğünü ve afinitenin “sıfırlandığını”, en azından el freni ile başıma geldiğini söylemenin faydalı olacağını düşünüyorum.
MonkeyZeus

2
@ MonkeyZeus Genellikle, bir işlem çıktığında yakınlık kaydedilir. Bu yalnızca çalışmakta olan işlem için geçerlidir. El freni kendi kendine yeni süreçler doğuruyor olabilir, yoksa siz yenilerini başlattınız.
jpmc26

@ jpmc26 Bilmek güzel! Kesinlikle yeni bir sürece başlamamıştım, bu yüzden kendi başına yumurtlaması gerekiyor.
MonkeyZeus

7

Görev yöneticisini açmayı, "Ayrıntılar" veya "İşlemler" sekmesine geçerek (Windows sürümünüze bağlı olarak), excel.exe işlemini sağ tıklatıp seçerek, excel işleminin önceliğini azaltmayı deneyebilirsiniz. düşük öncelik. Bu, diğer işlemlere daha fazla CPU zamanı vermelidir.


1
İşe yaramadı: Önceliği çok düşük olarak belirledim ve bilgisayar hala duruyor.
öğrenme

1
Belki web tarayıcınızın önceliğini artırmayı veya aynı zamanda ne yapmaya çalıştığınızı artırmayı deneyebilirsiniz. Değişken önceliklerin ne kadar etkili olduğu üzerine bu tartışmayı buldum .
Slithy,

3
@SlithyToves: Bu gerçekten önemli olmamalı. Öncelik, birden fazla aday olması durumunda hangi programın CPU alacağını belirler. Excel'i çok düşük bir değere ayarlamak, diğer tüm programlar tamamlandığında yalnızca bir CPU dilimi alması anlamına gelir. Ancak, Excel zaman yapar bir işlemci dilim olsun, o dilim vazgeçmeyeceğim. Sadece bir sonraki CPU zaman dilimindeki rekabeti kaybedecek.
MSalters

3

VBA'da veya bir beyanname yoluyla Uyku ve Bekleme işlevleri bulunmaktadır. Bununla birlikte, "aşırı basit kural kuralı" hiçbir zaman Sleep () kullanmamaktır. (google '"asla uyku kullanmayın ()" programlama')

Application.Wait için Doc sayfası ( https://msdn.microsoft.com/en-us/library/office/ff822851.aspx ). Uyku ve Bekle'nin Excel'in belirttiğiniz süre boyunca yanıt vermemesine neden olacağını ve bu durumun zaman dilimi "tren enkazlarına" neden olabileceğini unutmayın.

Hesaplamanız bir tür döngü içeriyorsa, bunu kendi amacınıza göre işlemenin bir yolu (CPU kullanılabilirliği için hesaplama zamanını kaybetme), kendinize ait özel bir bekleme işlevi yapmaktır; örneğin DoEvents () 1 saniye boyunca sonra döner.

DoEvents temel olarak kodunuza / tercümanınıza işletim sistemi vb. İçin zaman vermesini söyler. Bu kesinlikle kodunuzun daha uzun sürmesine neden olacaktır. Ayrıca hesaplama devam ederken çalışma sayfasını düzenlemenize de izin verebilir, böylece milajınız değişebilir. Ölçek.

Örneğin, bkz. Https://stackoverflow.com/questions/469347/is-there-an-equivalent-to-thread-sleep-in-vba



0

Dizüstü bilgisayarımın 4GB belleği olduğunda da aynı sorunu yaşadım. 16GB'a yükseltir almaz sorun durdu. Başka bir olası çözüm.


0

Makronuzun başlangıcına yakın bir yere aşağıdaki 2 satırı ekleyin:

'Turn off screen updating

 Application.ScreenUpdating = False

Ve bu 2 satır sonuna yakın:

'Turn screen updating back on

 Application.ScreenUpdating = True

Daha sonra başka bir şey yaparken daha az işi olacak.


-2

64bit işletim sisteminde bir 32bi ofisi kullanıyorsanız bu uygulamayı kullanmalısınız: http://www.ntcore.com/4gb_patch.php

Bu uygulama excel veya diğer herhangi bir ofis 32bit mo kullanmak sağlayacak


Sorun CPU'yu sınırlamakla ilgili, cevabınız AWE'den bile faydalanamayacak uygulamalarda AWE'yi aktive etmekle ilgili.
Martheen Cahya Paulo

-5

OpenOffice veya LibreOffice kullanın: komut dosyası yazma gücü MS olandan çok daha etkilidir ve kelimenin tam anlamıyla hesaplarınızda "kısma" alabilirsiniz.

EDIT: Neden aşağı oy? bakmak manuel ve kendiniz görün. Hesaplamalarınızı Java'ya dönüştürebilir ve örneğin JVM'nin tüm boğucu güçleriyle iyi çalışabilirsiniz .


3
Oy vermedim, ancak sanırım OP'de sorulan doğrudan soruya bir çözüm yerine bir çözüm bulmak için bir çözüm önerdiyseniz: "Çalışırken ne kadar fazla CPU kullanımına erişebileceğini sınırlamanın bir yolu var mı? "
Monkpit

@Monkpit OpenOffice ile olan hikayem benzer bir problemden başladı, portation sahip olduğumuz tüm dokümanlar için yaklaşık bir hafta sürdü, ancak bundan sonra MS Office'i bir daha asla kullanamayacağımı düşündüm.
Alexey Vesnin,

OpenOffice, insanların% 99'unun Office'i Libre üzerinden kullanması nedeniyle Office'ten derinden üstündür, bu nedenle geliştiriciler (muhtemelen bu adam gibi). Bu yüzden düşürdüm.
Thomas Shera,

@ThomasShera Pekala, hiç anlayamıyorum - neden bu kadar uzun bir süredir Microsoft'luların işleri düzeltemiyor ? Hayır, yeni bir şey gerekmiyor, ek ürün yok - sadece ürününüzü gerçekten çalışır hale getirin ...
Alexey Vesnin
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.