Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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# 部署到客户端后,Sqlite批插入速度变慢';s机器_C#_Winforms_Sqlite - Fatal编程技术网

C# 部署到客户端后,Sqlite批插入速度变慢';s机器

C# 部署到客户端后,Sqlite批插入速度变慢';s机器,c#,winforms,sqlite,C#,Winforms,Sqlite,我有一个C#windows应用程序,有时该应用程序会用于从excel文件导入记录,我可以在一分钟内使用批插入在我的开发机器上导入2500条记录,当我尝试常规插入方法时,插入2500条记录也用了同样的一分钟,在我部署应用程序并安装到客户机上后,情况变得更糟,导入相同数量的记录需要两个多小时,我只是觉得由于我使用批量插入,速度应该得到极大优化,下面是我的代码: public int InsertTaxRecordBatchTransaction(IEnumerable<EmployeeDet

我有一个C#windows应用程序,有时该应用程序会用于从excel文件导入记录,我可以在一分钟内使用批插入在我的开发机器上导入2500条记录,当我尝试常规插入方法时,插入2500条记录也用了同样的一分钟,在我部署应用程序并安装到客户机上后,情况变得更糟,导入相同数量的记录需要两个多小时,我只是觉得由于我使用批量插入,速度应该得到极大优化,下面是我的代码:

 public int InsertTaxRecordBatchTransaction(IEnumerable<EmployeeDetails> employeeDetails)
    {
        SQLiteConnection conn = null;
        SQLiteCommand cmd = null;
        var results = new List<int>();

        try
        {              
            string insert = "INSERT INTO IncomeTax (OrganisationId,OrganisationName,StaffId,StaffName,Department,Position,NoOfMonthsWorked,TaxIdNumber,SessionId,Month,Year,BasicSalaryVALUES (@OrganisationId,@OrganisationName,@StaffId,@StaffName,@Department,@Position,@NoOfMonthsWorked,@TaxIdNumber,@SessionId,@Month,@Year,@BasicSalary);";
            using (conn = new SQLiteConnection(connstring))
            {
                conn.Open();
                using (var transaction = conn.BeginTransaction())
                {
                    try
                    {
                        using (cmd = conn.CreateCommand())
                        {
                            //cmd = new SQLiteCommand(insert, conn);
                            cmd.CommandType = CommandType.Text;
                            cmd.CommandText = insert;
                            cmd.CommandTimeout = 900000000;
                            cmd.Parameters.Add("@OrganisationId", DbType.String, 50).Value = OrganisationId;
                            cmd.Parameters.Add("@OrganisationName", DbType.String, 50).Value = OrganisationName;
                            cmd.Parameters.Add("@StaffID", DbType.String, 50).Value = StaffId;
                            cmd.Parameters.Add("@StaffName", DbType.String, 50).Value = StaffName;
                            cmd.Parameters.Add("@Department", DbType.String, 50).Value = Department;
                            cmd.Parameters.Add("@Position", DbType.String, 50).Value = Position;
                            cmd.Parameters.Add("@NoOfMonthsWorked", DbType.Int16, 5).Value = NoOfMonthsWorked;
                            cmd.Parameters.Add("@TaxIdNumber", DbType.String, 5).Value = TaxIdNumber;
                            cmd.Parameters.Add("@SessionId", DbType.String, 20).Value = SessionId;
                            cmd.Parameters.Add("@Month", DbType.String, 20).Value = Month;
                            cmd.Parameters.Add("@Year", DbType.String, 20).Value = Year;
                            cmd.Parameters.Add("@BasicSalary", DbType.Decimal, 2).Value = BasicSalary;

                            foreach (var employee in employeeDetails)
                            {
                                cmd.Parameters.Add("@OrganisationId", DbType.String, 50).Value = employee.OrganisationId;
                                cmd.Parameters.Add("@OrganisationName", DbType.String, 50).Value = employee.OrganisationName;
                                cmd.Parameters.Add("@StaffID", DbType.String, 50).Value = employee.StaffId;
                                cmd.Parameters.Add("@StaffName", DbType.String, 50).Value = employee.StaffName;
                                cmd.Parameters.Add("@Department", DbType.String, 50).Value = employee.Department;
                                cmd.Parameters.Add("@Position", DbType.String, 50).Value = employee.Position;
                                cmd.Parameters.Add("@NoOfMonthsWorked", DbType.Int16, 5).Value = employee.NoOfMonthsWorked;
                                cmd.Parameters.Add("@TaxIdNumber", DbType.String, 5).Value = employee.TaxIdNumber;
                                cmd.Parameters.Add("@SessionId", DbType.String, 20).Value = employee.SessionId;
                                cmd.Parameters.Add("@Month", DbType.String, 20).Value = employee.Month;
                                cmd.Parameters.Add("@Year", DbType.String, 20).Value = employee.Year;
                                cmd.Parameters.Add("@BasicSalary", DbType.Decimal, 2).Value = employee.BasicSalary;

                                results.Add(cmd.ExecuteNonQuery());
                            }

                        }
                        transaction.Commit();
                        DspMsg = "Tax computed successfully!";
                    }
                    catch(Exception ex)
                    {
                        transaction.Rollback();
                        DspMsg = ex.Message+ " some errors have occured, no record was saved! ";
                    }
                }
            }
           // conn.Close();
        }
        catch (SQLiteException ex)
        {

            DspMsg = ex.Message;
        }
        return results.Sum();
    }
public int InsertTaxRecordBatchTransaction(IEnumerable employeeDetails)
{
SQLiteConnection conn=null;
SQLiteCommand cmd=null;
var results=新列表();
尝试
{              
string insert=“插入IncomeTax(OrganizationId、OrganizationName、StaffId、StaffName、部门、职位、NoOfMonthsWorked、TaxIdNumber、SessionId、月、年、基本日历值(@OrganizationId、@OrganizationName、@StaffId、@StaffName、@Department、@Position、@NoOfMonthsWorked、@TaxIdNumber、@SessionId、@Month、@Year、@BasicSalary);”;
使用(conn=newsqliteconnection(connstring))
{
conn.Open();
使用(var transaction=conn.BeginTransaction())
{
尝试
{
使用(cmd=conn.CreateCommand())
{
//cmd=新的SQLiteCommand(插入,连接);
cmd.CommandType=CommandType.Text;
cmd.CommandText=插入;
cmd.CommandTimeout=900000000;
cmd.Parameters.Add(“@OrganizationId”,DbType.String,50).Value=OrganizationId;
cmd.Parameters.Add(“@OrganizationName”,DbType.String,50).Value=OrganizationName;
cmd.Parameters.Add(“@StaffID”,DbType.String,50).Value=StaffID;
cmd.Parameters.Add(“@StaffName”,DbType.String,50).Value=StaffName;
cmd.Parameters.Add(“@Department”,DbType.String,50).Value=Department;
cmd.Parameters.Add(“@Position”,DbType.String,50).Value=Position;
cmd.Parameters.Add(“@NoOfMonthsWorked”,DbType.Int16,5).Value=NoOfMonthsWorked;
cmd.Parameters.Add(“@TaxIdNumber”,DbType.String,5).Value=TaxIdNumber;
cmd.Parameters.Add(“@SessionId”,DbType.String,20).Value=SessionId;
cmd.Parameters.Add(“@Month”,DbType.String,20).Value=Month;
cmd.Parameters.Add(“@Year”,DbType.String,20).Value=Year;
cmd.Parameters.Add(“@BasicSalary”,DbType.Decimal,2).Value=BasicSalary;
foreach(员工详细信息中的var员工)
{
cmd.Parameters.Add(“@OrganizationId”,DbType.String,50).Value=employee.organizationId;
cmd.Parameters.Add(“@OrganizationName”,DbType.String,50).Value=employee.organizationName;
cmd.Parameters.Add(“@StaffID”,DbType.String,50).Value=employee.StaffID;
cmd.Parameters.Add(“@StaffName”,DbType.String,50).Value=employee.StaffName;
cmd.Parameters.Add(“@Department”,DbType.String,50).Value=employee.Department;
cmd.Parameters.Add(“@Position”,DbType.String,50).Value=employee.Position;
cmd.Parameters.Add(“@NoOfMonthsWorked”,DbType.Int16,5).Value=employee.NoOfMonthsWorked;
cmd.Parameters.Add(“@TaxIdNumber”,DbType.String,5).Value=employee.TaxIdNumber;
cmd.Parameters.Add(“@SessionId”,DbType.String,20).Value=employee.SessionId;
cmd.Parameters.Add(“@Month”,DbType.String,20).Value=employee.Month;
cmd.Parameters.Add(“@Year”,DbType.String,20).Value=employee.Year;
cmd.Parameters.Add(“@BasicSalary”,DbType.Decimal,2).Value=employee.BasicSalary;
Add(cmd.ExecuteNonQuery());
}
}
Commit();
DspMsg=“税务计算成功!”;
}
捕获(例外情况除外)
{
transaction.Rollback();
DspMsg=ex.Message+“发生了一些错误,没有保存任何记录!”;
}
}
}
//康涅狄格州关闭();
}
catch(SQLiteException-ex)
{
DspMsg=例如消息;
}
返回results.Sum();
}

我不知道我哪里弄错了,我将感谢您的帮助。

您的开发机器与客户的生产机器等效吗?您知道,您的开发机器是否有16GB的ram和8个四核处理器,支持4个高性能SSD驱动器,而客户机是一台单核机器,具有2GB的ram和一个sp我还安装了我的系统进行测试,这也花了很长时间(与其他机器相同的两个小时,其次,我的开发机器甚至比客户机的代码还要低。代码看起来还行(除了在值之前缺少空格)。但是循环调用
参数。为每个条目添加
。是否
参数。添加
忽略重复项?