使用大容量卷系统时,c#窗口服务速度变慢
下面我粘贴了一个c#代码,我在Windows服务中使用线程方法,在服务初始时间,它在系统上的某些进程变慢后正常工作,有时我会收到错误,如系统超时内存执行类错误 有人能告诉我我的线程方法是否好吗?请提出一些建议 我正在使用计时器事件,它将每三分钟触发一次-->(DueTime) (CsvGenFromDatabase)-->这是我在start方法中调用的方法,它将调用此方法中的一些子方法使用大容量卷系统时,c#窗口服务速度变慢,c#,C#,下面我粘贴了一个c#代码,我在Windows服务中使用线程方法,在服务初始时间,它在系统上的某些进程变慢后正常工作,有时我会收到错误,如系统超时内存执行类错误 有人能告诉我我的线程方法是否好吗?请提出一些建议 我正在使用计时器事件,它将每三分钟触发一次-->(DueTime) (CsvGenFromDatabase)-->这是我在start方法中调用的方法,它将调用此方法中的一些子方法 protected override void OnStart(string[] args) {
protected override void OnStart(string[] args)
{
strNowDate = DateTime.Now.ToLongTimeString();
timerjob.Elapsed += new ElapsedEventHandler(CsvGenFromDatabase);
timerjob.Interval = Convert.ToDouble(DueTime);
timerjob.Enabled = true;
eventLog1.WriteEntry("my service started");
}
protected override void OnStop()
{
strNowDate = DateTime.Now.ToLongTimeString();
eventLog1.WriteEntry("my service stopped");
}
private void CsvGenFromDatabase(object sender, EventArgs e)
{
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew)) // Transaction Scope Started
{
Thread threadITD = new Thread(new ThreadStart(FileGenerationForITD)); // Thread Initialize for ITD
Thread threadCTD = new Thread(new ThreadStart(FileGenerationForCTD)); // Thread Initialize for CTD
Thread threadCID = new Thread(new ThreadStart(FileGenerationForCID)); // Thread Initialize for CID
Thread threadFFM = new Thread(new ThreadStart(FileGenerationForFFM)); // Thread Initialize for FFM
try
{
if ((threadITD == null) || (threadITD.ThreadState == System.Threading.ThreadState.Stopped) || (threadITD.ThreadState == System.Threading.ThreadState.Unstarted))
{
threadITD.Start(); // Thread Started for ITD
//LogError(1, "Form1", "CsvGenFromDatabase", "ITD Thread Started", "ITD Thread Started");
}
if ((threadCTD == null) || (threadCTD.ThreadState == System.Threading.ThreadState.Stopped) || (threadCTD.ThreadState == System.Threading.ThreadState.Unstarted))
{
threadCTD.Start(); // Thread Started for CTD
// LogError(1, "Form1", "CsvGenFromDatabase", "CTD Thread Started", "CTD Thread Started");
}
if ((threadCID == null) || (threadCID.ThreadState == System.Threading.ThreadState.Stopped) || (threadCID.ThreadState == System.Threading.ThreadState.Unstarted))
{
threadCID.Start(); // Thread Started for CID
// LogError(1, "Form1", "CsvGenFromDatabase", "CID Thread Started", "CID Thread Started");
}
if ((threadFFM == null) || (threadFFM.ThreadState == System.Threading.ThreadState.Stopped) || (threadFFM.ThreadState == System.Threading.ThreadState.Unstarted))
{
threadFFM.Start(); // Thread Started for FFM
//LogError(1, "Form1", "CsvGenFromDatabase", "FFM Thread Started", "FFM Thread Started");
}
}
catch (Exception ex)
{
objErrorLog.SrtErrorText = ex.ToString().Substring(0, 25);
objErrorLog.StrErrorDescription = ex.ToString();
objErrorLog.WriteErrorLog(objErrorLog);
}
finally
{
scope.Complete();
}
}
}
线程正在忙着等待吗 换言之,通过循环等待某些事情发生,并通过这种搅动燃烧循环?人们应该用逻辑来避免在无事可做时如此忙碌的等待。要做到这一点,只需 睡眠(0)
通知CLR将线程的时间片交给另一个实际需要它的线程,该线程将在下一个周期开始时以最快的方式重新启动 您创建线程的速度是否比处理工作的速度快?您可以检查服务的线程数,看看它是否会随着时间的推移而继续增加。此外,在.NET中,您通常应该避免显式创建线程,而是使用线程池API。我不同意Chris的观点。线程池以更好的方式管理线程,但如果没有创建/销毁线程,则滚动自己的线程不会导致任何重大损失。private void CsvGenFromDatabase(){timerjob.Stop();//长时间运行的进程timerjob.Start();}如果我真的喜欢我的问题会解决吗?如果我真的喜欢上面的评论,除非工作A完成,否则它不会启动工作B,希望我们停止工作B以正确启动?