Высокая загрузка процессора службы C# windows
Я создал службу windows, запустив эту службу с высокой загрузкой процессора..
Пожалуйста, найдите приведенный ниже код..
здесь метод ComputeData () вызывает процедуру, и эта процедура занимает 1:23 минуты для выполнения. установите здесь 5-минутный интервал для выполнения метода ComputeData ().
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using System.Timers; using System.Configuration; namespace UpdateData { public partial class Service1 : ServiceBase { static Timer timer; public Service1() { InitializeComponent(); } private static void start_timer() { timer.Start(); } protected override void OnStart(string[] args) { timer = new Timer(); timer.Interval = TimeSpan.FromMinutes(5).TotalMilliseconds; timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); timer.Enabled = true; timer.Start(); } public static bool ExecuteTime() { TimeSpan StartingTime = new TimeSpan( Int32.Parse(ConfigurationManager.AppSettings["StartingTimeHour"]), Int32.Parse(ConfigurationManager.AppSettings["StartingTimeMinute"]), 0); TimeSpan EndingTime = new TimeSpan( Int32.Parse(ConfigurationManager.AppSettings["EndingTimeHour"]), Int32.Parse(ConfigurationManager.AppSettings["EndingTimeMinute"]), 0); TimeSpan CurrentTime = DateTime.Now.TimeOfDay; return ((CurrentTime > StartingTime) && (CurrentTime < EndingTime)); } static void timer_Elapsed(object sender, ElapsedEventArgs e) { try { DateTime TodayDate = DateTime.Now; if (TodayDate.DayOfWeek == DayOfWeek.Saturday || TodayDate.DayOfWeek == DayOfWeek.Sunday) { } else { while (ExecuteTime()) { BasicBO.ComputeData(); } } } catch (Exception ex) { string msg = ex.Message + " at " + DateTime.Now + " From timer_Elapsed method"; BasicBO.writeLog(msg, "UpdateVMErrorLog.txt"); } } protected override void OnStop() { string msg = "Service Stoped at : " + DateTime.Now; BasicBO.writeLog(msg, "UpdateVMStopLog.txt"); } } }
Что я уже пробовал:
до сих пор я пытался увеличить временной интервал от 3 до 5 минут, но проблема с разверткой осталась прежней.
F-ES Sitecore
Возможно, вам лучше установить таймер так, чтобы он срабатывал каждую секунду, а затем в этом случае проверить один раз, должен ли код запускаться, то есть изменить "while" на "if". Как бы то ни было, Ваш код срабатывает мало, но когда он срабатывает, то работает очень долго. Вам лучше заставить его стрелять чаще и бегать меньше времени.
Проблема, с которой вы столкнетесь с этим методом, заключается в том, что вам понадобится какой-то способ запомнить, что ComputeData была запущена в течение этого интервала времени, поскольку таймер, вероятно, будет срабатывать несколько раз в окне, в котором вы хотите запустить код.
Philippe Mori
Вероятно, вам также следует установить приоритет потока ниже обычного, чтобы служба не оказывала слишком большого влияния на пользовательский интерфейс...