当前位置:编程学习 > C#/ASP.NET >>

C#list集合问题

我本地运行一个程序
用了list集合
里面数据量有140,000
本地跑完需要6个小时,本机内存6G

我上传到服务器,内存16G,跑完需要20几个小时,怎么回事 --------------------编程问答-------------------- 那还得看你服务器的可用内存吧.一次性搞这么多? --------------------编程问答-------------------- 神仙才知道,谁知道你做什么运算了,服务器什么配置,或许你的算法太差 --------------------编程问答-------------------- 什么List什么运算啊。
俺觉得list<大英百科全书>.sort()也不至于那么长时间 --------------------编程问答--------------------  一个LIST 和 内存扯上关系了 --------------------编程问答--------------------
引用 3 楼 yang1216 的回复:
什么List什么运算啊。
俺觉得list<大英百科全书>.sort()也不至于那么长时间


我只是循环这个list ,次数有点多,14万 --------------------编程问答--------------------
引用 4 楼 dr592112441 的回复:
一个LIST 和 内存扯上关系了

那为什么相差这么多呢,能分析下原因吗 --------------------编程问答--------------------
引用 2 楼 bdmh 的回复:
神仙才知道,谁知道你做什么运算了,服务器什么配置,或许你的算法太差


算法,我仅仅是循环这个list,做插入操作 --------------------编程问答-------------------- 14万次循环插入?如果是链表结构的话也不算啥呀。
每次插入的数据有1个G? --------------------编程问答--------------------
引用 8 楼 yang1216 的回复:
14万次循环插入?如果是链表结构的话也不算啥呀。
每次插入的数据有1个G?

每次插入的,很少,仅十二个字段而已,信息量小 --------------------编程问答-------------------- 插入数据库?你插入时每次都重新打开数据库连接?没有连接池?and so on --------------------编程问答-------------------- 你插入是数据库插入?? 循环一次插入一次? --------------------编程问答-------------------- List<T> 中的结构是一样的,是否可以考虑批量插入呢,比如每次1000条 --------------------编程问答--------------------
引用 12 楼 Net_Java_dram 的回复:
List<T> 中的结构是一样的,是否可以考虑批量插入呢,比如每次1000条
该怎么改呢 --------------------编程问答--------------------
引用 11 楼 seominho 的回复:
你插入是数据库插入?? 循环一次插入一次?
是的 --------------------编程问答--------------------
引用 10 楼 FunnyRabbit87 的回复:
插入数据库?你插入时每次都重新打开数据库连接?没有连接池?and so on


    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);
        } --------------------编程问答-------------------- 楼主要吗给出源码,要吗把问题说清楚。
这种不清不楚的问题,猜起来费劲 --------------------编程问答--------------------
引用 15 楼 json6518507 的回复:
引用 10 楼 FunnyRabbit87 的回复:插入数据库?你插入时每次都重新打开数据库连接?没有连接池?and so on

    public int ExecuteNonQuery(string connectionString, string spName, string[] paramsNames, params object[] parameters……


你那些写会导致每次都打开关闭数据库连接。估计_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分钟之内。因为中间涉及网络通信,所以具体时间我也没测过。
--------------------编程问答--------------------
引用 17 楼 FunnyRabbit87 的回复:
引用 15 楼 json6518507 的回复:引用 10 楼 FunnyRabbit87 的回复:插入数据库?你插入时每次都重新打开数据库连接?没有连接池?and so on

    public int ExecuteNonQuery(string connectionString, string spName, string[] paramsNames, pa……




  [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]
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,