我本地运行一个程序
用了list集合
里面数据量有140,000
本地跑完需要6个小时,本机内存6G我上传到服务器,内存16G,跑完需要20几个小时,怎么回事

解决方案 »

  1.   

    什么List什么运算啊。
    俺觉得list<大英百科全书>.sort()也不至于那么长时间
      

  2.   

     一个LIST 和 内存扯上关系了
      

  3.   


    我只是循环这个list ,次数有点多,14万
      

  4.   


    算法,我仅仅是循环这个list,做插入操作
      

  5.   

    插入数据库?你插入时每次都重新打开数据库连接?没有连接池?and so on
      

  6.   

    List<T> 中的结构是一样的,是否可以考虑批量插入呢,比如每次1000条
      

  7.   


        public int ExecuteNonQuery(string connectionString, string spName, string[] paramsNames, params object[] parameters)
            {
                if (paramsNames.Length != parameters.Length)
                    throw new Exception("存储过程参数匹配错误!");            SqlParameter[] paras = new SqlParameter[parameters.Length];
                for (int i = 0; i < parameters.Length; i++)
                {
                    paras[i] = new SqlParameter(paramsNames[i], parameters[i]);
                }            return _sqlDataHelper.ExecuteNonQuerySP(connectionString, spName, paras);
            }
      

  8.   


    你那些写会导致每次都打开关闭数据库连接。估计_sqlDataHelper工具类 _sqlDataHelper.ExecuteNonQuerySP(connectionString, spName, paras);就是每次打开新连接的。虽然据说ADO.NET自带线程池(据说,没看到过官方证实)。但是你可以尝试下如下写:最好是using(SqlConnection conn=new SqlConnection(connectionString)){
         //打开数据连接等你需要的操作
        .........
        conn.open();
        .........
        for(遍历你的list){
                        SqlCommand cmd = new SqlCommand("XXXX", conn);
                        cmd.CommandType = CommandType.StoredProcedure;
                        ......//ADO.NET运行存储过程的代码,你可以网上找下模仿着来
                         cmd.ExecuteNonQuery();
        }
         
    }此外 在上面基础上你可以多开几个线程,比如把数据分成5个部分,用5个线程执行去分别执行其中一部分。不过基本上单线程就可以了。我这么写,打开事务的情况下,插入3627行数据,提交事务完成,这个过程在1分钟之内。因为中间涉及网络通信,所以具体时间我也没测过。
      

  9.   


      [color=#FFFF99]  foreach (SearchResult sr in results)
                {
                    i++;
                    User user =ReadUser(sr);
                    SqlParameter[] parameters = {
                            new SqlParameter("@login_username", SqlDbType.VarChar),
                            new SqlParameter("@name", SqlDbType.VarChar),
                            new SqlParameter("@email", SqlDbType.VarChar),
                          
                            new SqlParameter("@gender", SqlDbType.Int),
                             new SqlParameter("@province", SqlDbType.VarChar),
                            new SqlParameter("@city", SqlDbType.VarChar),
                            new SqlParameter("@address", SqlDbType.VarChar),
                            new SqlParameter("@birthday", SqlDbType.DateTime),
                            new SqlParameter("@mobilephone", SqlDbType.VarChar),
                      
                            new SqlParameter("@group", SqlDbType.VarChar),
                             new SqlParameter("@company", SqlDbType.VarChar),
                            new SqlParameter("@department", SqlDbType.VarChar),
                            new SqlParameter("@office", SqlDbType.VarChar),
                            new SqlParameter("@team", SqlDbType.VarChar),
                             new SqlParameter("@state", SqlDbType.Int)
                        };
                    user.GroupCompany = "浙江移动总公司";
                    parameters[0].Value = user.ID;
                    parameters[1].Value = user.Name;
                    parameters[2].Value = user.EmailAddress;
                    parameters[3].Value = user.Gender;
                    parameters[4].Value = user.Province;
                    parameters[5].Value = user.City;
                    parameters[6].Value = user.Street;
                    parameters[7].Value = user.Birthday ;
                    parameters[8].Value = user.MobilePhone;
                    parameters[9].Value = "浙江移动总公司";
                    parameters[10].Value = user.Company;
                    parameters[11].Value = user.DepartmentName;
                    parameters[12].Value = user.OfficeLocation;
                    parameters[13].Value = user.Team;
                    parameters[14].Value = user.Status_Attribute;
                  
                    try
                    {
                      SqlDataReader a=  DbHelperSQL.RunProcedure("ImportSyncProfileofBosss", parameters);
                                      }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }}
    [/color]