ป้องกัน. NET Runtime Optimization Service ไม่ให้ทำงานบนแบตเตอรี่หรือไม่


11

เมื่อฉันเปิดแล็ปท็อปเมื่อเช้านี้มันรีบูตตัวเอง (หลังจากติดตั้งอัปเดต) ขณะนี้. NET Runtime Optimization Service (ngen?) กำลังใช้งาน CPU อยู่เล็กน้อยในขณะที่คอมพิวเตอร์ใช้พลังงานจากแบตเตอรี่ ฉันสงสัยว่ามีวิธีใดบ้างที่จะขอให้ Windows เลื่อนงานเหล่านี้จนกว่าจะเสียบแล็ปท็อปหรือไม่ ฉันเสียบแล็ปท็อปในชั่วข้ามคืน แต่ 30% ของแบตเตอรี่ของฉันหายไปหลังจากการใช้งานน้อยกว่าหนึ่งชั่วโมงซึ่งไม่ใช่สถานการณ์ปกติ

คอมพิวเตอร์ของฉันไม่ได้ใช้งานในขณะที่มันทำเช่นนี้ดังนั้นผมถือว่ารวบรวมประกอบมีความสำคัญสูงหลังจากการปรับปรุง Framework สุทธิจากบทความนี้

ฉันตรวจสอบประวัติการอัปเดตของ windows และได้ติดตั้งอัปเดตสะสมข้ามคืนในขณะเสียบปลั๊ก ( https://support.microsoft.com/en-ie/help/4038788/windows-10-update-kb4038788 ) ฉันหวังว่า windows จะเรียกใช้การเพิ่มประสิทธิภาพ. net เป็นส่วนหนึ่งของกระบวนการนั้นแทนที่จะรอให้ฉันเริ่มใช้แล็ปท็อปกับแบตเตอรี่

ผู้จัดการงาน


ฉันเพิ่งเห็นบริการเดียวกันกิน CPU ทันทีทันใดและพัดลมก็ดังขึ้น แต่ในกรณีของฉันมันเป็นหลังจากที่ฉันทำให้คอมพิวเตอร์เข้าสู่โหมดสลีปหลังจากใช้งานไป 2 ชั่วโมง ฉันไม่สามารถหยุดบริการได้ (ในหน้าต่างที่คุณโพสต์ไว้ด้านบนในมุมมองรายละเอียด) หลังจากผ่านไป 5-10 นาทีฉันก็เดาว่ามันเป็นเรื่องของการรอไม่กี่นาที
hansaplast

คำตอบ:


5

คำตอบสั้น ๆ คือไม่คุณไม่สามารถชะลอ ngen ได้อย่างน่าเชื่อถือ (และคุณไม่ควรลอง) ตัวเลือกที่สอดคล้อง / มีประโยชน์ที่ฉันพบคือบังคับให้มันทำงานให้เสร็จและไม่ปล่อยให้แฝงตัวอยู่เบื้องหลัง

หากคุณพยายามที่จะบันทึกซีพียูบางรอบบนแบตเตอรี่ (หรือในกรณีของฉันหยุดเซิร์ฟเวอร์ไม่ให้เรียกใช้ ngen หลังจากส่งคืนไปยังบริการหลังจากอัพเดต Windows) ตัวเลือกที่ดีที่สุดของคุณคือบังคับให้ ngen รันด้วยตัวคุณเอง สำหรับพีซีแบบตั้งโต๊ะมี 2 ตัวเลือกที่ควรคำนึงถึง:

  1. สร้างไฟล์. bat หรือ. ps1 บนเดสก์ท็อปของคุณด้วยคำสั่ง ngen ที่เหมาะสมด้านล่าง - เพียงแค่ดับเบิลคลิกและรอให้ ngen ปิดก่อนที่คุณจะถอดปลั๊ก หากคุณสร้างสคริปต์ในโฟลเดอร์ Windows ของคุณแทนและทางลัดไปยังสคริปต์บนเดสก์ท็อปของคุณคุณยังสามารถใช้ Command หรือ Powershell Prompt หรือไดอะล็อก Run เพื่อเรียกใช้งานตามที่ต้องการ (ก่อนที่คุณจะถอดปลั๊ก / หลังการอัพเดท)

  2. ตัวเลือกอื่นที่ควรใช้คือใช้งานที่กำหนดเวลาไว้เพื่อเรียกใช้งานสคริปต์ด้านบน เรียกใช้เมื่อเริ่มต้นโดยไม่มีผู้ใช้ที่เข้าสู่ระบบในฐานะผู้ดูแลระบบ หากแล็ปท็อปของคุณได้รับอนุญาตให้ติดตั้งอัปเดตข้ามคืนและสามารถรีบูตเครื่องได้ควรทำงานได้ดี

ในการรัน ngen คุณต้องการเพียงหนึ่งในคำสั่งต่อไปนี้ใช้ตัวเลือกแรก / เหมาะสมที่สุดสำหรับระบบของคุณ:

  • .Net 4 หรือดีกว่าบน 64 บิต C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executeQueuedItems

  • .Net 4 หรือดีกว่าบน 32 บิต C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe executeQueuedItems

  • .Net 3 หรือน้อยกว่าบน 64 บิต C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ngen.exe executeQueuedItems

  • . Net 3 หรือน้อยกว่าใน 32 บิต C:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe executeQueuedItems

ด้านล่างเป็นผลลัพธ์ที่น้อยที่สุดที่คุณได้รับจาก ngen เมื่อไม่มีรายการที่อยู่ในคิว:

PS C:\Users\Administrator> C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executeQueuedItems
Microsoft (R) CLR Native Image Generator - Version 4.6.1586.0
Copyright (c) Microsoft Corporation.  All rights reserved.
All compilation targets are up to date.

เมื่อ ngen.exe ทำงานด้วยexecuteQueuedItemsมันจะบังคับให้ทำงานที่ค้างอยู่ทั้งหมดโดยเร็วที่สุด โดยปกติแล้ว ngen จะทำงานบนเธรดพื้นหลังที่มีลำดับความสำคัญต่ำ (และเห็นได้ชัดว่าเพิ่งเริ่มต้นโดยการสุ่ม) แนวคิดที่ว่ามันไม่ควรที่จะอดกระบวนการอื่น ๆ ของ CPU - แม้ว่ามันจะไม่ได้ผลเสมอไป การเรียกใช้ ngen แบบโต้ตอบนั้นเร็วกว่าปล่อยให้มันรันอยู่เบื้องหลัง แต่จะส่งผลต่อประสิทธิภาพมากกว่า ใช้เวลานานเท่าใดขึ้นอยู่กับฮาร์ดแวร์ของคุณและจำนวน / รูปภาพดั้งเดิมที่ต้องทำการคอมไพล์ใหม่


ถ้าฉันปล่อยเครื่องทิ้งไว้ (ดีจริง ๆ แล้ว Virtualbox VM) ไม่กี่นาที ngen.exe ก็เริ่มกินซีพียูทั้งหมด อย่างไรก็ตามหากฉันเรียกใช้คำสั่งใด ๆ หรือทั้งหมดข้างต้นในหน้าต่างผู้ดูแลระบบ cmd ฉันจะกลับมาอย่างรวดเร็ว "เป้าหมายการรวบรวมทั้งหมดเป็นรุ่นล่าสุด" :-( [โอ้ - ฉันอาจจะต้องพูดถึงว่านี่เป็นเครื่องพัฒนาฉันสงสัยว่ากระบวนการของ Visual Studio ทำให้เกิดปัญหา ... ]
mwardm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.