Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用大容量卷系统时,c#窗口服务速度变慢_C# - Fatal编程技术网

使用大容量卷系统时,c#窗口服务速度变慢

使用大容量卷系统时,c#窗口服务速度变慢,c#,C#,下面我粘贴了一个c#代码,我在Windows服务中使用线程方法,在服务初始时间,它在系统上的某些进程变慢后正常工作,有时我会收到错误,如系统超时内存执行类错误 有人能告诉我我的线程方法是否好吗?请提出一些建议 我正在使用计时器事件,它将每三分钟触发一次-->(DueTime) (CsvGenFromDatabase)-->这是我在start方法中调用的方法,它将调用此方法中的一些子方法 protected override void OnStart(string[] args) {

下面我粘贴了一个c#代码,我在Windows服务中使用线程方法,在服务初始时间,它在系统上的某些进程变慢后正常工作,有时我会收到错误,如系统超时内存执行类错误

有人能告诉我我的线程方法是否好吗?请提出一些建议

我正在使用计时器事件,它将每三分钟触发一次-->(DueTime)

(CsvGenFromDatabase)-->这是我在start方法中调用的方法,它将调用此方法中的一些子方法

 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以正确启动?