调试版本的代码运行速度比已发布的已安装应用程序快10倍

时间:2019-06-06 07:40:52

标签: c# winforms visual-studio-2017 mysqldatareader

与在VS 2107调试对话框模式下运行相同代码相比,使用已安装的应用程序发行版时,我的功能之一在同一台计算机上的运行速度慢10倍。显然,调试模式可以执行某些操作或预加载一些可以帮助代码更快运行的内容,我不知道这是什么吗?

我试图使代码更高效,但没有帮助,因为问题与代码的复杂性无关,实际上很简单。

 public void AcuSyncRegularProtocol(string DateStamp, string EnergyStart, string EnergyEnd, string tanentTable)
    {

        List<string> EnergyList = new List<string>();
        List<string> TableList = new List<string>();

        decimal EnergyStartValue = Convert.ToDecimal(EnergyStart);
        decimal EnergyEndValue = Convert.ToDecimal(EnergyEnd);
        decimal EnergyConsumed = EnergyEndValue - EnergyStartValue;
        decimal sharp = 0;
        decimal peack = 0;
        decimal valley = 0;

        string tou_type = "0";
        string tou_tariff = "0";
        string tou_schedule = "0";
        string tou_schedule_type = "0";
        string tou_schedule_number = "0";
        string time = "0";

        int index = -1;

        ConvertStringTime cst = new ConvertStringTime();
        DateTime DateInput = cst.ParseExactConverter(DateStamp);
        if (DateInput.Minute.ToString() == "0") { DateInput = DateInput.AddHours(-1); }

        //Get the correct TOU tables based on the date

        try
        {
            MySqlCommand CycleTableInfo = new MySqlCommand("SELECT table_name FROM information_schema.tables WHERE table_schema ='acumanager';", myConn);

            MySqlDataReader CycleTableInfoReader;
            myConn.Open();
            CycleTableInfoReader = CycleTableInfo.ExecuteReader();
            while (CycleTableInfoReader.Read())
            {
                string tmp = CycleTableInfoReader.GetString("TABLE_NAME");

                //Get only TOU related tables

                if ((tmp.Contains("tou_") == true))
                {
                    DateTime StartTuoDate = cst.ParseExactConverter(tmp);

                    if (StartTuoDate <= DateInput)
                    {
                        TableList.Add(CycleTableInfoReader["TABLE_NAME"].ToString());
                    }
                }
            }
            myConn.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        //filter old unwanted tables

        for (int i = 0; i < TableList.Count; i++)
        {
            DateTime CurrentTable = cst.ParseExactConverter(TableList[i]);

            for (int j = 0; j < TableList.Count; j++)
            {
                DateTime ReferenceTable = cst.ParseExactConverter(TableList[j]);

                if (ReferenceTable > CurrentTable) { TableList.RemoveAt(i); break; }

            }
        }

        //find the index of the seasons table

        for (int i = 0; i < TableList.Count; i++) { if (TableList[i].Contains("tou_seasons")) { index = i; break; } }

        //Get the correct schedule type based on the day of week

        tou_schedule_type = DateInput.DayOfWeek.ToString();
        if (tou_schedule_type == "Friday") { tou_schedule_type = "schedule-f"; }
        else if (tou_schedule_type == "Saturday") { tou_schedule_type = "schedule-s"; }
        else { tou_schedule_type = "schedule-w"; }

        //Get the schedule number based on schedule type and inputdate month

        try
        {
            MySqlCommand CycleTableInfo = new MySqlCommand("SELECT * FROM acumanager.`" + TableList[index] + "` WHERE month ='" + DateInput.Month.ToString() + "'; ", myConn);

            MySqlDataReader CycleTableInfoReader;
            myConn.Open();
            CycleTableInfoReader = CycleTableInfo.ExecuteReader();
            while (CycleTableInfoReader.Read())
            {
                tou_schedule_number = CycleTableInfoReader.GetString(tou_schedule_type);
            }
            myConn.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        tou_schedule = "schedule" + tou_schedule_number;
        tou_tariff = "tariff" + tou_schedule_number;

        //find the index of the schedule table

        for (int i = 0; i < TableList.Count; i++) { if (TableList[i].Contains("tou_schedules")) { index = i; break; } }

        //Get the tariff based on schedule number and time

        time = DateInput.Hour.ToString() + ":00" + ":00";

        try
        {
            MySqlCommand CycleTableInfo = new MySqlCommand("SELECT * FROM acumanager.`" + TableList[index] + "` WHERE " + tou_schedule + " ='" + time + "'; ", myConn);
            MySqlDataReader CycleTableInfoReader;
            myConn.Open();
            CycleTableInfoReader = CycleTableInfo.ExecuteReader();

            while (CycleTableInfoReader.Read())
            {
                tou_tariff = CycleTableInfoReader.GetString(tou_tariff);
            }
            myConn.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        //find the index of the price table

        for (int i = 0; i < TableList.Count; i++) { if (TableList[i].Contains("tou_prices")) { index = i; break; } }

        //Get the correct ennergy type base on the tariff

        try
        {
            MySqlCommand CycleTableInfo = new MySqlCommand("SELECT * FROM acumanager.`" + TableList[index] + "` WHERE tou_price_id ='" + tou_tariff + "'; ", myConn);

            MySqlDataReader CycleTableInfoReader;
            myConn.Open();
            CycleTableInfoReader = CycleTableInfo.ExecuteReader();

            while (CycleTableInfoReader.Read())
            {
                tou_type = CycleTableInfoReader.GetString("nameENG");
            }
            myConn.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        //Get the previous values of TOU

        try
        {
            MySqlCommand InsertEntry = new MySqlCommand("SELECT * FROM customers." + tanentTable + " ORDER BY Date DESC LIMIT 1;", myConn);
            MySqlDataReader CycleTableInfoReader;
            myConn.Open();
            CycleTableInfoReader = InsertEntry.ExecuteReader();
            while (CycleTableInfoReader.Read())
            {
                sharp = CycleTableInfoReader.GetDecimal("Sharp");
                peack = CycleTableInfoReader.GetDecimal("Peack");
                valley = CycleTableInfoReader.GetDecimal("Valley");
            }
            myConn.Close();
        }
        catch (Exception ex) { MessageBox.Show(ex.Message); myConn.Close(); }
        myConn.Close();

        //add the delta to the correct TOU type

        if (tou_type == "Sharp") { sharp = sharp + EnergyConsumed; }
        else if (tou_type == "Peack") { peack = peack + EnergyConsumed; }
        else if (tou_type == "Valley") { valley = valley + EnergyConsumed; }
        else { MessageBox.Show("תקלה בזיהוי התעריף"); }

        //insert the TOU values back

        try
        {
            MySqlCommand InsertEntry = new MySqlCommand("insert into customers." + tanentTable + " (Date,Energy,Sharp,Peack,Valley) values('" + DateStamp + "','" + EnergyEnd + "','" + sharp + "', '" + peack + "', '" + valley + "')  ;", myConn);
            MySqlDataReader CycleTableInfoReader;
            myConn.Open();
            CycleTableInfoReader = InsertEntry.ExecuteReader();
            myConn.Close();
        }
        catch (Exception ex)
        {
            if (ex.ToString().Contains("Duplicate entry") == false)
            {
                MessageBox.Show(ex.Message);
                myConn.Close();
            }
        }
        myConn.Close();

    }

0 个答案:

没有答案