จำกัด การใช้ CPU ของ Excel


31

มีวิธี จำกัด จำนวนการใช้ CPU ที่ยอดเยี่ยมในการเข้าถึงเมื่อใช้งานหรือไม่? ฉันมีสคริปต์ VBA ที่คำนวณสูตรอาร์เรย์ขนาดยักษ์จำนวนมาก การคำนวณทั้งหมดอาจใช้เวลา 20 นาทีโดยใช้ CPU 100% ของฉัน แต่ฉันไม่สามารถใช้เครื่องของฉันในช่วงเวลานั้นและต้องการให้มันทำงานในพื้นหลังที่มีการใช้งาน CPU 50% ดังนั้นฉันจึงสามารถทำสิ่งอื่น ๆ ต่อไปได้ ข้อเสนอแนะใด ๆ

ระบบปฏิบัติการของฉันคือ Windows 7 Enterprise 64 บิตและรุ่น Excel คือ 2007-32 บิต


1
Windows? เวอร์ชันไหน
DavidPostill

Windows 7 ฉันจะเพิ่มไปยังโพสต์
การเรียนรู้

8
รับซีพียูแบบมัลติคอร์หรือไม่? หากคุณมีอยู่แล้ว (ใครไม่มี?) และ Excel ใช้แกนทั้งหมด (ซึ่งฉันไม่รู้ว่า Excel ทำได้) ให้ตั้งค่าความสัมพันธ์ในตัวจัดการงาน
253751

2
สิ่งนี้ไม่ได้ตอบคำถาม แต่ให้แน่ใจว่าคุณปิดการปรับปรุงหน้าต่างก่อนที่จะเริ่มการคำนวณและการปรับปรุงเซลล์หลายพันเซลล์ หากคุณมีแผนภูมิใด ๆ ให้ปิดแผนภูมิเหล่านั้นด้วย VBA นั้นช้า แต่เมื่อมันช้าจริง ๆแล้วมันมักจะตำหนิหนึ่งหรือทั้งสองอย่าง
Coxy

1
@cat: ไม่การใช้งาน CPU 100% ใน Windows Task Manager หมายถึง 100% สำหรับตัวประมวลผลเชิงตรรกะทั้งหมด หากเติมเพียงแกนเดียวมันจะเป็น 25% (บนแกนคู่ทั่วไปที่มีเธรดไฮเปอร์) หรือ ~ 36% (การเพิ่มพลังเทอร์โบ)
Martheen Cahya Paulo

คำตอบ:


54

หากมีการเรียกใช้ฟังก์ชัน VBA จากสูตรหลายสูตรหรือหากสคริปต์ของคุณสร้างหรือบังคับให้คำนวณใหม่ของสูตรหลายสูตรสิ่งนี้ควรใช้คุณสมบัติการคำนวณแบบมัลติเธรดของ Excel อย่างแน่นอน สิ่งนี้จะเรียกใช้ฟังก์ชัน VBA หลายอินสแตนซ์ของคุณสำหรับแต่ละสูตรหรือคำนวณหลายเซลล์พร้อมกันในขณะที่สคริปต์ vba ของคุณทำงานบนเธรดเดี่ยว

คุณสามารถ จำกัด จำนวนเธรดที่ Excel ใช้เพื่อคำนวณสูตรใหม่ในตัวเลือกของ Excel ... แท็บขั้นสูง ... ส่วนสูตร

ป้อนคำอธิบายรูปภาพที่นี่


VBA sub ไม่ใช่ปัญหา แต่เป็นสูตรอาร์เรย์ excel ที่สร้างรหัส VBA
learningAsIGO

@learningAsIGo ถูกต้องฉันทำให้คำตอบง่ายขึ้น แจ้งให้เราทราบว่าการตั้งค่าจำนวนเธรดเป็น 1 ช่วยหรือไม่
mtone

1
ดูเหมือนว่าจะได้ทำเคล็ดลับ ฉันตั้งค่าเป็น 3 คอร์และสูงสุดที่ 75% ของ CPU ทำให้ฉันมีพื้นที่เหลือเฟือที่จะทำสิ่งอื่น ๆ ขอบคุณ!
learningAsIGO

27

แทนที่จะลดระดับความสำคัญลองเปลี่ยนความสัมพันธ์ในตัวจัดการงาน หากคุณมี CPU มากกว่า 1 ตัวคุณสามารถ จำกัด จำนวนของ CPU ที่ Excel จะใช้ สิ่งนี้จะทำให้ซีพียูอื่น ๆ สามารถทำงานได้อย่างอิสระ

คลิกขวาที่ Excel ในแท็บกระบวนการและเลือกตั้งค่าความสัมพันธ์ เลือก CPU ที่คุณต้องการให้ Excel ทำงาน


3
โปรดทราบว่าสำหรับ affinity นั้น Windows จะพิจารณา CPU แต่ละคอร์เช่นกัน (ดังนั้นจะใช้งานได้หากคุณมีแกนคู่หรือควอดคอร์)
jpmc26

1
ถ้าพูดถึงคอร์โดยเฉพาะทำไมไม่มีเธรด HyperThreading? พวกเขายังมี CPU ที่แตกต่างกันทางตรรกะ นั่นคือ CPU แบบ quad-core ที่มี HT จะมีโลจิคัล CPU 8 ตัว
Ruslan

ฉันทำสิ่งนี้ตลอดเวลาเมื่อเรียกใช้ HandBrake และเพียงแค่ต้องการท่องอินเทอร์เน็ตเป็นเวลาหนึ่งชั่วโมงโดยไม่หยุดหรือหยุดกระบวนการแปลงรหัส ฉันคิดว่ามันจะคุ้มค่าที่จะพูดถึงว่าหลังจากเวลาผ่านไปแกนก็จะถูกปล่อยกลับไปที่โปรแกรมและความสัมพันธ์ "รีเซ็ต" อย่างน้อยก็เกิดขึ้นกับฉันด้วยเบรกมือ
MonkeyZeus

2
@MonkeyZeus โดยปกติแล้วความสัมพันธ์จะไม่ถูกบันทึกเมื่อกระบวนการออก มันใช้กับกระบวนการที่กำลังทำงานอยู่เท่านั้น อาจเป็นได้ว่า HandBrake กำลังวางไข่กระบวนการใหม่ด้วยตัวเองหรือคุณเริ่มต้นกระบวนการใหม่
jpmc26

@ jpmc26 ดีที่รู้! แน่นอนฉันไม่ได้เริ่มกระบวนการใหม่ด้วยตัวเองดังนั้นมันจะต้องวางไข่ด้วยตัวเอง
MonkeyZeus

7

คุณสามารถลองลดระดับความสำคัญของกระบวนการ excel โดยการค้นหาการเปิดตัวจัดการงานสลับไปที่แท็บ "รายละเอียด" หรือ "กระบวนการ" (ขึ้นอยู่กับรุ่นของ Windows) คลิกขวาที่กระบวนการ excel.exe และเลือก ลำดับความสำคัญต่ำกว่า สิ่งนี้ควรให้เวลา CPU เพิ่มเติมกับกระบวนการอื่น ๆ


1
ดูเหมือนจะใช้งานไม่ได้: ฉันตั้งค่าลำดับความสำคัญต่ำมากและมันยังล่าช้าคอมพิวเตอร์
learningAsIGO

1
อาจลองเพิ่มลำดับความสำคัญของเว็บเบราว์เซอร์ของคุณหรือสิ่งที่คุณพยายามทำในเวลาเดียวกันด้วยใช่ไหม ฉันพบการสนทนานี้ว่าลำดับความสำคัญการเปลี่ยนแปลงที่มีประสิทธิภาพเป็นอย่างไร
Slithy Toves

3
@SlithyToves: นั่นไม่ควรสำคัญ ระดับความสำคัญเป็นตัวกำหนดว่าโปรแกรมใดจะได้รับ CPU หากมีผู้สมัครหลายคน การตั้งค่า Excel ให้ต่ำมากหมายความว่าจะได้รับ CPU ชิ้นต่อเมื่อเสร็จสิ้นโปรแกรมอื่นทั้งหมดเท่านั้น แต่เมื่อ Excel ไม่ได้รับชิ้น CPU ก็จะไม่ให้ขึ้นชิ้นที่ มันจะเสียการแข่งขันสำหรับซีพียูครั้งต่อไป
MSalters

3

มีฟังก์ชั่น Sleep and Wait ใน VBA หรือผ่านการประกาศ อย่างไรก็ตาม "กฎง่าย ๆ สุดธรรมดา" คือการไม่ใช้ Sleep () (google '"ไม่ใช้ sleep ()" programming ")

หน้าเอกสารสำหรับ Application.Wait ( https://msdn.microsoft.com/en-us/library/office/ff822851.aspx ) โปรดทราบว่า Sleep and Wait จะทำให้ Excel ไม่ตอบสนองตามระยะเวลาที่คุณระบุและอาจทำให้ "Train wrecks" เป็นช่วงเวลาได้

หากการคำนวณของคุณเกี่ยวข้องกับการเรียงลำดับแล้ววิธีหนึ่งในการจัดการสิ่งนี้เพื่อวัตถุประสงค์เฉพาะของคุณ (ปรับเวลาการคำนวณสำหรับความพร้อมใช้งาน CPU) คือการสร้างฟังก์ชันรอพิเศษของคุณเองเช่นวนลูป DoEvents เป็นเวลา 1 วินาทีและ จากนั้นส่งคืน

DoEvents บอกรหัส / ล่ามของคุณเพื่อสละเวลาให้กับระบบปฏิบัติการ ฯลฯ มันจะทำให้รหัสของคุณใช้เวลานานขึ้น นอกจากนี้ยังช่วยให้คุณสามารถแก้ไขแผ่นงานในขณะที่การคำนวณกำลังดำเนินอยู่ดังนั้นระยะเวลาของคุณอาจแตกต่างกันไป ทดสอบ.

ดูตัวอย่างเช่นhttps://stackoverflow.com/questions/469347/is-there-an-equivalent-to-thread-sleep-in-vba


2

เควสต์ที่คล้ายกันถูกถามเมื่อไม่กี่ปีที่ผ่านมาซึ่งมีวิธีแก้ไข: มีวิธีแก้ปัญหาที่ จำกัด การใช้งาน CPU ของกระบวนการหรือไม่?

Process Tamer ใช้งานได้กับ Windows 7 http://www.donationcoder.com/Software/Mouser/proctamer/


0

ฉันมีปัญหาเดียวกันเมื่อแล็ปท็อปของฉันมีหน่วยความจำ 4GB ทันทีที่ฉันได้รับการอัปเกรดเป็น 16GB ปัญหาก็หยุดลง อีกวิธีหนึ่งที่เป็นไปได้


0

เพิ่ม 2 บรรทัดต่อไปนี้ที่ใกล้กับจุดเริ่มต้นของแมโครของคุณ:

'Turn off screen updating

 Application.ScreenUpdating = False

และเส้นทั้งสองนี้ใกล้ถึงจุดสิ้นสุด:

'Turn screen updating back on

 Application.ScreenUpdating = True

จากนั้นจะมีงานต้องทำน้อยลงในขณะที่คุณทำอย่างอื่น


-2

หากคุณใช้สำนักงาน 32bi ในระบบปฏิบัติการ 64 บิตคุณควรใช้แอพนี้: http://www.ntcore.com/4gb_patch.php

แอพนี้จะทำให้ excel หรือออฟฟิศ 32 บิตอื่น ๆ ใช้ mo


คำถามนี้เกี่ยวกับการ จำกัด CPU คำตอบของคุณเกี่ยวกับการเปิดใช้งาน AWE บนแอพซึ่งอาจไม่ได้ใช้ประโยชน์จาก AWE
Martheen Cahya Paulo

-5

ใช้ OpenOffice หรือ LibreOffice: พลังการเขียนของสคริปต์นั้นมีประสิทธิภาพมากกว่า MS หนึ่งและคุณสามารถมี "คันเร่ง" ในการคำนวณของคุณ

แก้ไข: ทำไม downvote ดูคู่มือและดูด้วยตัวคุณเอง คุณสามารถแปลงการคำนวณของคุณเพื่อชวาและเป็นเพียงแค่ปรับกับอำนาจการควบคุมปริมาณของ JVM ยกตัวอย่างเช่น


3
ฉันไม่ได้ลงคะแนน แต่ฉันคิดว่าเป็นเพราะคุณเสนอวิธีแก้ปัญหาแทนที่จะตอบคำถามตรง ๆ ที่ถามใน OP: "มีวิธี จำกัด การใช้งาน CPU ที่ excel เข้าถึงได้หรือไม่? "
Monkpit

@ Monkpit เรื่องราวของฉันกับ OpenOffice เริ่มต้นจากปัญหาที่คล้ายกันการแบ่งข้อมูลใช้เวลาประมาณหนึ่งสัปดาห์สำหรับเอกสารทั้งหมดที่เรามี แต่หลังจากนั้นฉันก็ให้ความเห็นว่าฉันจะไม่ใช้ MS Office อีกเลย
Alexey Vesnin

OpenOffice นั้นยอดเยี่ยมกว่า Office อย่างมากด้วยเหตุผลที่ว่า 99% ของผู้คนจะใช้ Office ผ่าน Libre ดังนั้นนักพัฒนาซอฟต์แวร์ (อาจจะชอบผู้ชายคนนี้) นั่นเป็นเหตุผลที่ฉัน downvote
Thomas Shera

@ThomasShera ดีฉันไม่สามารถเข้าใจได้เลย - ทำไมเป็นเวลาหลายปีที่พวกไมโครซอฟต์ไม่สามารถแก้ไขปัญหาได้ ? ไม่ไม่จำเป็นต้องมีสิ่งใหม่ไม่มีแอดออน - ทำให้ผลิตภัณฑ์ของคุณใช้งานได้จริง ...
Alexey Vesnin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.