读取txt文件 数据格式是json json数据有2.3w条 然后进行添加或修改的操作 为什么老是内存溢出,请问有没有好一点的解决方法
自己写的读写json类吗?我用cppjson,写操作几万条,没发现内存溢出
string wenbeng=File.ReadALLText(文件路径,Encoding.Default);
你试试这个可以让文本框里显示文字
改一下jdk的使用内存试试
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();
}
}
}
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;
}
建议不要把json存到文件中,本身.net平台是有对象序列化的,你把对象直接序列化为本地的文本。
2.3w的数据多大要确定一下,如果文件很大,可以按照固定大小例如5M或者行数去切割,切割完毕再去处理,避免内存溢出;
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();
}
}
}
可以根据json格式截取去不同的json串