Mencegah Layanan Optimasi Runtime .NET dari berjalan dengan baterai?

10

Ketika saya membuka laptop saya pagi ini, ia telah reboot sendiri (setelah menginstal pembaruan). Sekarang .NET Runtime Optimization Service (ngen?) Menggunakan cukup banyak CPU saat komputer menggunakan baterai. Saya bertanya-tanya, apakah ada cara untuk meminta Windows menunda tugas-tugas ini sampai laptop terpasang? Laptop saya terpasang dalam semalam tetapi 30% baterai saya hilang setelah kurang dari satu jam penggunaan, yang bukan situasi yang biasa.

Komputer saya tidak menganggur saat melakukan hal ini, jadi saya menganggap kompilasi rakitan prioritas tinggi setelah pembaruan .Net Framework dari artikel ini .

Saya memeriksa riwayat pembaruan windows, dan itu telah menginstal pembaruan kumulatif semalam saat terhubung. ( Https://support.microsoft.com/en-ie/help/4038788/windows-10-update-kb4038788 ). Saya berharap windows akan menjalankan optimasi .net sebagai bagian dari proses itu alih-alih menunggu saya untuk mulai menggunakan laptop pada baterai.

Pengelola tugas


sumber
Saya baru saja melihat layanan yang sama tiba-tiba memakan banyak CPU dan kipas menjadi keras. Tetapi dalam kasus saya itu setelah saya mematikan komputer setelah 2 jam menggunakannya. Saya tidak bisa menghentikan layanan (baik di jendela yang Anda posting di atas nore dalam tampilan detail). Setelah 5-10 menit selesai, jadi saya kira itu hanya masalah menunggu beberapa menit
hansaplast

Jawaban:

4

Jawaban singkatnya adalah tidak, Anda tidak dapat dengan mudah menunda ngen (dan Anda tidak boleh mencoba), satu-satunya pilihan yang konsisten / berguna yang saya temukan adalah memaksanya untuk menjalankannya sampai selesai dan tidak membiarkannya mengintai di latar belakang.

Jika Anda mencoba menyimpan beberapa siklus CPU pada baterai (atau dalam kasus saya hentikan server dari menjalankan ngen setelah mengembalikannya ke layanan setelah pembaruan Windows) pilihan terbaik Anda adalah memaksa ngen untuk menjalankan sendiri. Untuk PC desktop, 2 pilihan muncul di pikiran:

  1. Buat file .bat atau .ps1 di desktop Anda dengan perintah ngen yang sesuai di bawah ini - cukup klik dua kali dan tunggu ngen untuk menutup sebelum Anda mencabut kabel. Jika Anda membuat skrip di folder Windows sebagai gantinya dan pintas ke skrip di desktop Anda, Anda juga dapat menggunakan Command atau Powershell Prompt atau dialog Run untuk menjalankannya seperti yang diperlukan (sebelum Anda mencabut / setelah pembaruan).

  2. Opsi lain yang seharusnya berfungsi adalah menggunakan tugas terjadwal untuk mengeksekusi skrip di atas. Jalankan saat startup, tanpa pengguna login, sebagai Administrator. Jika laptop Anda diizinkan menginstal pembaruan dalam semalam dan dapat mem-boot ulang ini seharusnya berfungsi dengan baik.

Untuk menjalankan ngen Anda hanya perlu salah satu dari perintah berikut, gunakan opsi pertama / paling tepat untuk sistem Anda:

  • Net 4 atau lebih baik pada 64bit C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe executeQueuedItems

  • Net 4 atau lebih baik pada 32bit C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngen.exe executeQueuedItems

  • Net 3 atau kurang pada 64bit C:\Windows\Microsoft.NET\Framework64\v2.0.50727\ngen.exe executeQueuedItems

  • Net 3 atau kurang pada 32bit C:\Windows\Microsoft.NET\Framework\v2.0.50727\ngen.exe executeQueuedItems

Di bawah ini adalah output minimal yang Anda dapatkan dari ngen ketika tidak ada item yang antri:

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.

Ketika ngen.exe dijalankan dengan executeQueuedItemsitu akan memaksanya untuk melakukan semua tugas yang tertunda secepat mungkin. Biasanya ngen berjalan pada utas latar belakang prioritas rendah (dan tampaknya baru saja dimulai secara acak), idenya adalah tidak seharusnya kelaparan proses CPU lainnya - meskipun itu tidak selalu berhasil. Menjalankan ngen secara interaktif lebih cepat daripada membiarkannya berjalan di latar belakang - tetapi itu akan lebih memengaruhi kinerja. Berapa lama waktu yang dibutuhkan tergantung pada perangkat keras Anda dan berapa banyak / gambar asli mana yang perlu dikompilasi ulang.

TuanSmith
sumber
Jika saya meninggalkan komputer saya menganggur (well, sebenarnya VM Virtualbox) selama beberapa menit maka ngen.exe mulai memakan semua CPU. Namun, jika saya menjalankan salah satu atau semua perintah di atas di jendela cmd administrator, saya segera kembali "Semua target kompilasi adalah yang terbaru." :-( [Oh - Saya mungkin seharusnya menyebutkan bahwa ini adalah mesin pengembangan. Saya ingin tahu apakah proses Visual Studio menyebabkan masalah ...]
mwardm