她说随意 2018-04-08 08:43 采纳率: 0%
浏览 1690
已采纳

读取txt文件 数据格式是json 然后进行添加或修改的操作 为什么老是内存溢出

读取txt文件 数据格式是json json数据有2.3w条 然后进行添加或修改的操作 为什么老是内存溢出,请问有没有好一点的解决方法

  • 写回答

10条回答 默认 最新

  • bluefree168 2018-04-08 08:53
    关注

    自己写的读写json类吗?我用cppjson,写操作几万条,没发现内存溢出

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • FledglingGrowth 2018-04-08 09:00
    关注

    string wenbeng=File.ReadALLText(文件路径,Encoding.Default);
    你试试这个可以让文本框里显示文字

    评论
  • 酱油来也 2018-04-08 09:02
    关注

    改一下jdk的使用内存试试

    评论
  • FledglingGrowth 2018-04-08 09:04
    关注

    string wenbeng=File.ReadALLText(文件路径,Encoding.Default);
    你试试这个可以让文本框里显示文字

    评论
  • black-rat 2018-04-08 09:06
    关注

    有代码没?把代码贴出来啊

    评论
  • 她说随意 2018-04-08 09:17
    关注

    JSONArray jsonArray=new JSONArray(userJson);
    //同步用户信息
    DtuserForm dtuserForm = null;
    String login_name = "";
    String realName = "";
    String user_id = "";
    String becomeDate = "";
    String mobile = "";
    String userType = "";
    String orgId = "";
    JSONObject jsonObject= null;
    for (int i = 0; i < jsonArray.length(); i++) {
    dtuserForm = new DtuserForm();
    jsonObject= (JSONObject) jsonArray.get(i);
    String validFlag = (String)jsonObject.get("validFlag");
    if("0".equals(validFlag)){
    validFlag = "2";
    }
    login_name = (String)jsonObject.get("login_name");
    login_name = getPersonAndOrganData.desEncrypt(login_name);
    realName = (String)jsonObject.get("realName");
    System.out.println("realName-------------"+realName);
    realName = getPersonAndOrganData.desEncrypt(realName);//解码
    //realName = getEncoding(realName);
    //realName = new String(realName.getBytes("UTF-8"),"UTF-8" );
    //realName = filterEmoji(realName);
    System.out.println("realName===="+realName+"====="+login_name);
    user_id = (String)jsonObject.get("user_id");
    System.out.println("userid--------------"+user_id);
    becomeDate = (String)jsonObject.get("becomeDate");
    mobile = (String)jsonObject.get("mobile");
    if(!"".equals(becomeDate) && becomeDate != null){
    if(becomeDate.length() >10){
    becomeDate = becomeDate.substring(0, 10);
    }
    }
    userType = (String)jsonObject.get("userType");//党员类型
    orgId = (String)jsonObject.get("orgId");
    dtuserForm.setDtuserid(user_id);
    dtuserForm.setDtusername(login_name);
    dtuserForm.setDtname(realName);
    dtuserForm.setMobile(mobile);
    dtuserForm.setRddate(becomeDate);
    dtuserForm.setTheflag(validFlag);
    dtuserForm.setDeptid(orgId);
    if("5".equals(userType) || "4".equals(userType)){//只同步党员或者预备党员
    addDtuser(db,dtuserForm,i);
    }

                        dtuserForm = null;
                        jsonObject = null;
                        validFlag = null;
                        login_name = null;
                        realName = null;
                        user_id = null;
                        becomeDate = null;
                        mobile = null;
                        userType = null;
                        orgId = null;
    
                    }
    
            }catch (Exception e) {
                e.printStackTrace();
            }finally{
                db.dbclose();
            }
        }
    
    }
    
    
    
     public boolean addDtuser(SqlData db,DtuserForm dtuserForm,int i) {
            boolean bIsSuccess = false;
            Collection c = new ArrayList();
            try {
                int countNum = new DtuserImpl().getUserCountByid(dtuserForm.getDtuserid());
                System.out.println("countNum--------------"+countNum);
                if(countNum <= 0){
                DateBean dt = new DateBean();
                String sql = "insert into dt_t_dtuser (dtuserid,dtusername,dtname,mobile,rddate,theflag,ifdjqx,theorder,thedate,dtflag) " +
                        "values ('"+dtuserForm.getDtuserid()+"','"+dtuserForm.getDtusername()+"','"+dtuserForm.getDtname()+"','"+dtuserForm.getMobile()+"','"+dtuserForm.getRddate()+"','"+dtuserForm.getTheflag()+"','0',"+(i+1)+",'"+dt.getalldate4()+"','1')";
                System.out.println(sql);
                String sql2 = "insert into dt_t_deptdtuser (deptdtuserid,deptid,dtusername) values ('"+UniqueIDGen.getUniqueID()+"','"+dtuserForm.getDeptid()+"','"+dtuserForm.getDtusername()+"')";
                System.out.println(sql2);
    
                String sql3 = "insert into dt_t_dueinit (dueinitid,dtusername,1due,2due,3due,4due,5due,6due,7due,8due,9due,10due,11due,12due,dtflag) " +
                        " values ('"+UniqueIDGen.getUniqueID()+"','"+dtuserForm.getDtusername()+"',0,0,0,0,0,0,0,0,0,0,0,0,'1')";
                System.out.println(sql3);
                c.add(sql);
                c.add(sql2);
                c.add(sql3);
                sql=null;
                sql2=null;
                sql3=null;
            }else{
                String sql4 = "";
                sql4 = "update dt_t_dtuser set dtname='"+dtuserForm.getDtname()+"',mobile='"+dtuserForm.getMobile()+"',rddate='"+dtuserForm.getRddate()+"',theflag = '"+dtuserForm.getTheflag()+"',theorder="+(i+1)+" ,dtflag='1' where dtusername = '"+dtuserForm.getDtusername()+"'";
                System.out.println("sql4------------------"+sql4);
    
                String sql5 = "update dt_t_deptdtuser set deptid = '"+dtuserForm.getDeptid()+"' where dtusername = '"+dtuserForm.getDtusername()+"'";
                System.out.println("sql5----------------"+sql5);
                c.add(sql4);
                c.add(sql5);
                sql4=null;
                sql5=null;
                //根据用户id获取数据库中的用户名,
                String dtusername = DtuserImpl.getDtusernameByid(db,dtuserForm.getDtuserid());
                String sql6 = "";
                String sql7 = "";
                String sql8 = "";
                //如果同步过来的用户名和数据库中的用户名不一样的话,修改数据库中所有的用户名
                if(!dtusername.equals(dtuserForm.getDtusername())){
                    sql6 = "update dt_t_dtuserweixin set dtusername = '"+dtuserForm.getDtusername()+"' where dtusername = '"+dtusername+"' ";
                    sql7 = "update dt_t_dueinit set dtusername = '"+dtuserForm.getDtusername()+"' where dtusername = '"+dtusername+"' ";
                    sql8 = "update dt_t_duelog set dtusername = '"+dtuserForm.getDtusername()+"' where dtusername = '"+dtusername+"' ";
                    c.add(sql6);
                    c.add(sql7);
                    c.add(sql8);
                    sql6=null;
                    sql7=null;
                    sql8=null;
                }
                dtusername=null;
            }
                db.executebatchTask(c);
            }
            catch (Exception e) {
                 e.printStackTrace();
            }
            finally {
                db.dbclose3();
            }
    
            return bIsSuccess;
        }
    
    评论
  • qq_40586621 2018-04-08 09:18
    关注

    建议不要把json存到文件中,本身.net平台是有对象序列化的,你把对象直接序列化为本地的文本。

    评论
  • _采菇凉的小蘑菇 2018-04-08 09:46
    关注

    2.3w的数据多大要确定一下,如果文件很大,可以按照固定大小例如5M或者行数去切割,切割完毕再去处理,避免内存溢出;

    评论
  • 无明之徒 2018-04-08 10:42
    关注

    string wenbeng=File.ReadALLText(文件路径,Encoding.Default);
    你试试这个可以让文本框里显示文字
    下面是代码:
    JSONArray jsonArray=new JSONArray(userJson);
    //同步用户信息
    DtuserForm dtuserForm = null;
    String login_name = "";
    String realName = "";
    String user_id = "";
    String becomeDate = "";
    String mobile = "";
    String userType = "";
    String orgId = "";
    JSONObject jsonObject= null;
    for (int i = 0; i < jsonArray.length(); i++) {
    dtuserForm = new DtuserForm();
    jsonObject= (JSONObject) jsonArray.get(i);
    String validFlag = (String)jsonObject.get("validFlag");
    if("0".equals(validFlag)){
    validFlag = "2";
    }
    login_name = (String)jsonObject.get("login_name");
    login_name = getPersonAndOrganData.desEncrypt(login_name);
    realName = (String)jsonObject.get("realName");
    System.out.println("realName-------------"+realName);
    realName = getPersonAndOrganData.desEncrypt(realName);//解码
    //realName = getEncoding(realName);
    //realName = new String(realName.getBytes("UTF-8"),"UTF-8" );
    //realName = filterEmoji(realName);
    System.out.println("realName===="+realName+"====="+login_name);
    user_id = (String)jsonObject.get("user_id");
    System.out.println("userid--------------"+user_id);
    becomeDate = (String)jsonObject.get("becomeDate");
    mobile = (String)jsonObject.get("mobile");
    if(!"".equals(becomeDate) && becomeDate != null){
    if(becomeDate.length() >10){
    becomeDate = becomeDate.substring(0, 10);
    }
    }
    userType = (String)jsonObject.get("userType");//党员类型
    orgId = (String)jsonObject.get("orgId");
    dtuserForm.setDtuserid(user_id);
    dtuserForm.setDtusername(login_name);
    dtuserForm.setDtname(realName);
    dtuserForm.setMobile(mobile);
    dtuserForm.setRddate(becomeDate);
    dtuserForm.setTheflag(validFlag);
    dtuserForm.setDeptid(orgId);
    if("5".equals(userType) || "4".equals(userType)){//只同步党员或者预备党员
    addDtuser(db,dtuserForm,i);
    }

                    dtuserForm = null;
                    jsonObject = null;
                    validFlag = null;
                    login_name = null;
                    realName = null;
                    user_id = null;
                    becomeDate = null;
                    mobile = null;
                    userType = null;
                    orgId = null;
    
                }
    
        }catch (Exception e) {
            e.printStackTrace();
        }finally{
            db.dbclose();
        }
    }
    

    }

    评论
  • zjt900123 2018-04-08 11:26
    关注

    可以根据json格式截取去不同的json串

    评论
查看更多回答(9条)

报告相同问题?

问题事件

  • 已采纳回答 10月31日

悬赏问题

  • ¥15 matlab runtime 如何收费
  • ¥20 用C语言绘制cs1.6方框透视 出现了点问题 绘制不上去 矩阵数据 和敌人坐标都是正确的
  • ¥15 Tpad api账户 api口令
  • ¥30 ppt进度条制作,vba语言
  • ¥15 生信simpleaffy包下载
  • ¥15 请教一下simulink中S函数相关问题
  • ¥15 在二层网络中,掩码存在包含关系即可通信
  • ¥15 端口转发器解析失败不知道电脑设置了啥
  • ¥15 Latex算法流程图行号自定义
  • ¥15 关于#python#的问题:我在自己的电脑上运行起来总是报错,希望能给我一个详细的教程,(开发工具-github)