协助优化

时间:2017-04-28 15:16:12

标签: c# wpf performance optimization

不确定stackoverflow是否通常用于这样的东西,但我正在寻求帮助优化我的代码。我正在运行一个方法来查询数据库中的计数,该计数很快并且工作正常。和一个设置为每5分钟运行一次的计时器。当我在初始化后在我的主窗口中实现计时器时,它会在打开窗口超过30秒时冻结。在添加定时器之前,它没有这样做。任何优化这方面的帮助或改进其工作方式的提示都会很棒!

运行SQL查询的方法:

public string SQLDataTotalCalls()
        {
            DateTime dte = DateTime.Today;

            string fixedStartDate = String.Format("{0:yyyy-MM-dd " + "05:00:00.000" + "}", dte);
            string fixedEndDate = String.Format("{0:yyyy-MM-dd " + "05:00:00.000" + "}", dte.AddDays(1));

            SqlConnection connection = null;

            using (connection)
            {
                try
                {
                    var dataSet = new DataSet();

                    connection = new SqlConnection("Data Source=QL1OADB1;Initial Catalog=OADB;User Id=;Password=");
                    connection.Open();

                    var command = new SqlCommand("SELECT COUNT(SOURCEID) AS 'MYCOUNT' "
                                                 + "FROM [OADB].[oadb].[CmsCallHistory] "
                                                 + "WHERE disposition = 2 and DISPSPLIT in (" + SkillNumber + ") AND SEGSTOP BETWEEN '" + fixedStartDate + "' and '" + fixedEndDate + "'",
                        connection)
                    {
                        CommandType = CommandType.Text
                    };

                    var dataAdapter = new SqlDataAdapter { SelectCommand = command };

                    dataAdapter.Fill(dataSet);

                    return dataSet.Tables[0].Rows[0]["MYCOUNT"].ToString();

                }
                catch (Exception e)
                {
                    throw new Exception(e.Message, e);
                }
                finally
                {
                    if (connection != null)
                    {
                        connection.Close();
                    }
                }
            }
        }

每5分钟触发一次方法的计时器:

public async Task RunPeriodicQueryTotalCalls()
        {
            TimeSpan interval = TimeSpan.FromMinutes(5);

            while (true)
            {
                await Task.Delay(interval);

                string result = await Task.Run((Func<string>)SQLDataTotalCalls);

                TotalDailyCalls = result;
            }
        }

这是我初始化窗口的地方。请注意,我还会在计时器运行之前首次启动应用程序时运行这些查询,否则数字将在5分钟后运行后才会发布:

public ScoreBoardBigViewWindow()
        {            
            InitializeComponent();            

            string value = "Enter Skill Number Here";
            if (Tmp.InputBox("New document", "New document name:", ref value) == System.Windows.Forms.DialogResult.OK)
            {
                SkillNumber = value;
            }

            TotalDailyLast7Days = SQLDataSevenPastCalls();
            TotalDailyCalls = SQLDataTotalCalls();
            TotalDailyAbandon = SQLDataAbandonCalls();           

            RunPeriodicQueryTotalCalls();
            RunPeriodicQueryAbandonCalls();
        }

如果我删除RunPeriodicQueryTotalCalls();和RunPeriodicQueryAbandonCalls();然后性能问题就消失了。

如果stackoverflow不是提出此类问题的正确位置,请告诉我,我会联系其他途径寻求进一步的帮助。

0 个答案:

没有答案