C# 3.0 使用C控制台应用程序上载数据

C# 3.0 使用C控制台应用程序上载数据,c#-3.0,C# 3.0,我有一个C控制台应用程序,它在使用各种C函数进行一些计算后,将数据上传到SQL Server数据库。现在的问题是,计算和上传一行数据几乎需要1秒钟,我必须以同样的方式上传50000行数据 请给我建议一个解决这个问题的方法 注意:我正在使用stringbuilder编写单独的insert语句并批量上传。此过程仅需1分钟 正如我在问题中提到的,插入或更新数据库几乎不需要任何时间。计算占用了大部分时间。我附上以下函数的代码示例: public void EsNoMinLim() {

我有一个C控制台应用程序,它在使用各种C函数进行一些计算后,将数据上传到SQL Server数据库。现在的问题是,计算和上传一行数据几乎需要1秒钟,我必须以同样的方式上传50000行数据

请给我建议一个解决这个问题的方法

注意:我正在使用stringbuilder编写单独的insert语句并批量上传。此过程仅需1分钟

正如我在问题中提到的,插入或更新数据库几乎不需要任何时间。计算占用了大部分时间。我附上以下函数的代码示例:

public void EsNoMinLim()

{
        ds = new DataSet();
        ds = getDataSet("select aa.Country, aa.Serial_No from UEM_Data aa inner join (select distinct " +
            "IId, Country from UEM_Data where Active_Status is null) bb on aa.iid = bb.iid where aa.Serial_No <> '0'").Copy();

        execDML("Delete from ProMonSys_Grading");

        StringBuilder strCmd = new StringBuilder();

        foreach (DataRow dRow in ds.Tables[0].Rows)
        {
            SiteCode = dRow["Country"].ToString();
            Serial_No = dRow["Serial_No"].ToString();

            ds_sub = new DataSet();
            ds_sub = getDataSet("select EsNo_Abs_Limit from EsNo_Absolute_Limit where Fec_Coding_Rate in "+
                "(select MODCOD from FEC_Master where NMS_Value in (select Top 1 FEC_Rate from "+
                "DNCC_Billing_Day where Serial_No = '" + Serial_No + "' and [Date] = (select max([Date]) "+
                "from DNCC_Billing_Day where Serial_No = '" + Serial_No + "')))").Copy();

            if (ds_sub.Tables[0].Rows.Count > 0 && Convert.ToString(ds_sub.Tables[0].Rows[0][0]) != "")
            {
                Min_EsNo = Convert.ToString(ds_sub.Tables[0].Rows[0][0]);
            }
            else
            {
                Min_EsNo = "a";
            }

            if (Min_EsNo != "a")
            {
                ds_sub = new DataSet();
                ds_sub = getDataSet("select Top 1 modal_Avg_EsNo from DNCC_Billing_Day where " +
                    "Serial_No = '" + Serial_No + "' and [Date] = (select max([Date]) from DNCC_Billing_Day " +
                    "where Serial_No = '" + Serial_No + "')").Copy();

                if (ds_sub.Tables[0].Rows.Count > 0 && Convert.ToString(ds_sub.Tables[0].Rows[0][0]) != "")
                {
                    Avg_EsNo = Convert.ToString(ds_sub.Tables[0].Rows[0][0]);
                }
                else
                {
                    Avg_EsNo = "-1";
                }

                ds_sub = new DataSet();
                ds_sub = getDataSet("select Top 1 Transmit_Power from ProMonSys_Threshold where Serial_No = '" + Serial_No + "'").Copy();

                if (ds_sub.Tables[0].Rows.Count > 0 && Convert.ToString(ds_sub.Tables[0].Rows[0][0]) != "")
                {
                    Threshold_EsNo = Convert.ToString(ds_sub.Tables[0].Rows[0][0]);
                }
                else
                {
                    Threshold_EsNo = "-1";
                }

                getGrade = EsNoSQFGrading(Min_EsNo, Avg_EsNo, Threshold_EsNo);

                strCmd.Append("insert into ProMonSys_Grading(SiteCode, Serial_No, EsNo_Grade) " +
                            "values('" + SiteCode + "','" + Serial_No + "','" + getGrade + "')");
            }
        }

        execDML_StringBuilder(strCmd);
    }

找出这个过程中最昂贵的部分。使用秒表分别检查加载、计算和保存所需的时间。然后,您可以告诉我们需要改进的部分。

没有足够的信息来回答问题。每个数据块平均有多大?使用探查器查看应用程序的哪个部分占用了大部分时间,并向我们显示代码。另外:如果您将结果写入本地文件而不是调用Command.ExecuteOnQuery,会发生什么情况?您正在进行的计算是什么?甚至有一点可能计算需要时间吗?