关于ArrayList内存占用问题

qq_39702560 2019-10-10 03:29:35
C#里ArrayList<String> list = new ArrayList<String>();与 使用ArrayList list= new ArrayList()如果把这两者放一个循环里在内存占用消耗上有什么区别???
...全文
428 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hello_android_lc 2019-10-15
  • 打赏
  • 举报
回复
可能是你这段代码引发的OOM,但是不一定是你这里没有及时释放出内存的原因,你可能正好在new新的对象时达到了临界点而已,最好是监控一下各模块的内存使用情况
exception92 2019-10-11
  • 打赏
  • 举报
回复
占用的同时也要即使的释放内存,不然都会溢出,看自己如何使用了。
牧歌ing 2019-10-11
  • 打赏
  • 举报
回复
引用 11 楼 qq_39702560 的回复:
[quote=引用 10 楼 Summer_djz的回复:]内存溢出更这两个没什么关系

麻烦你帮我看下上面的代码,看看和哪个有关系 [/quote]
你看看是不是调用的方法里面有东西一直开着
一起健身吧 2019-10-11
  • 打赏
  • 举报
回复
建议你用内存工具(我用的.NET Memory Profiler)看下哪个实例没有释放掉。
正怒月神 2019-10-10
  • 打赏
  • 举报
回复
引用 11 楼 qq_39702560 的回复:
[quote=引用 10 楼 Summer_djz的回复:]内存溢出更这两个没什么关系
麻烦你帮我看下上面的代码,看看和哪个有关系 [/quote] 和UploadFile方法有关系,内部记得释放stream之类的
qq_39702560 2019-10-10
  • 打赏
  • 举报
回复
引用 10 楼 Summer_djz的回复:
内存溢出更这两个没什么关系
麻烦你帮我看下上面的代码,看看和哪个有关系 😂
牧歌ing 2019-10-10
  • 打赏
  • 举报
回复
内存溢出更这两个没什么关系
qq_39702560 2019-10-10
  • 打赏
  • 举报
回复
引用 4 楼 github_36000833 的回复:
内存溢出跟具体使用了List<string>或ArrayList关系不大。 内存溢出跟你如何使用list有关系。
我的代码是这样的麻烦你帮我看看 private void FormQMTCHP20_EF_DO_F6(object sender, EF.EF_Args e) { try { string basepdf64; string s; string fileName; string paramValue; string paramValue1; string paramValue2; EI.EIInfo inInfo = new EI.EIInfo(); inInfo.Tables[0].Merge(this.efDevGrid4.GetSelectedDataRow()); if (inInfo.Tables[0].Rows.Count == 0) { this.EFMsgInfo = GC.GCRS.GCRSC0000014/*请选择需操作的记录。*/; return; } foreach (DataRow row in inInfo.Tables[0].Rows) { if (row["CERTI_BILL_NO"].ToString() == null) { this.EFMsgInfo = "存在质保书单据号为空的数据!"; return; } if (row["COMPANY_NAME"].ToString().Trim() == "0") { this.EFMsgInfo = "必须审核完成才能进行PDF操作!" + row["CERTI_PRINT_NO"].ToString(); return; } } int j = 0; foreach (DataRow row in inInfo.Tables[0].Rows) { if (row["CERTI_TYPE_CODE"].ToString() == "10") { paramValue1 = row["ORDER_NO"].ToString(); paramValue = row["CERTI_BILL_NO"].ToString(); paramValue2 = row["CERTI_PRINT_NO"].ToString(); //Hashtable myHT = new Hashtable(); //myHT.Add("CERTI_PRINT_NO", row["CERTI_PRINT_NO"].ToString()); //MessageBox.Show(uri.ToString()); EP.ExportPDF pdf = new EP.ExportPDF(); s = pdf.ExportReportFile("QMTCHP11", "@" + "CERTI_PRINT_NO" + "@$$" + paramValue2); UploadFile(userId, pwd, s, uri + "/" + "EC." + paramValue.Trim() + "." + paramValue1.Trim() + ".HA.pdf", paramValue2); //basepdf64 = DownLoadFile((paramValue.Trim() + ".pdf").Trim(), (uri + "/" + paramValue.Trim() + ".pdf").Trim(), userId, pwd); ArrayList array = new ArrayList(); array.Add(s); array.Add(s.Replace(".pdf", ".xls")); array.Add(s.Replace(".pdf", ".xlsx")); foreach (string file_name in array) { if (File.Exists(file_name)) { File.Delete(file_name); } } } else if (row["CERTI_TYPE_CODE"].ToString() == "20") { if (row["SHIP_CLASS_CODE"].ToString().Trim() == "CS") { paramValue1 = row["ORDER_NO"].ToString(); paramValue = row["CERTI_BILL_NO"].ToString(); paramValue2 = row["CERTI_PRINT_NO"].ToString(); //Hashtable myHT = new Hashtable(); //myHT.Add("CERTI_PRINT_NO", row["CERTI_PRINT_NO"].ToString()); EP.ExportPDF pdf = new EP.ExportPDF(); //s = pdf.ExportReportFileSingleSheet("QMTCHP11", myHT); s = pdf.ExportReportFile("QMTCBW11", "@" + "CERTI_PRINT_NO" + "@$$" + paramValue2); UploadFile(userId, pwd, s, uri + "/" + "EC." + paramValue.Trim() + "." + paramValue1.Trim() + ".HB.pdf", paramValue2); //basepdf64 = DownLoadFile((paramValue.Trim() + ".pdf").Trim(), (uri + "/" + paramValue.Trim() + ".pdf").Trim(), userId, pwd); ArrayList array = new ArrayList(); array.Add(s); array.Add(s.Replace(".pdf", ".xls")); array.Add(s.Replace(".pdf", ".xlsx")); foreach (string file_name in array) { if (File.Exists(file_name)) { File.Delete(file_name); } } } else { paramValue1 = row["ORDER_NO"].ToString(); paramValue = row["CERTI_BILL_NO"].ToString(); paramValue2 = row["CERTI_PRINT_NO"].ToString(); //Hashtable myHT = new Hashtable(); //myHT.Add("CERTI_PRINT_NO", row["CERTI_PRINT_NO"].ToString()); EP.ExportPDF pdf = new EP.ExportPDF(); //s = pdf.ExportReportFileSingleSheet("QMTCHP11", myHT); s = pdf.ExportReportFile("QMTCHP12", "@" + "CERTI_PRINT_NO" + "@$$" + paramValue2); UploadFile(userId, pwd, s, uri + "/" + "EC." + paramValue.Trim() + "." + paramValue1.Trim() + ".HC.pdf", paramValue2); //basepdf64 = DownLoadFile((paramValue.Trim() + ".pdf").Trim(), (uri + "/" + paramValue.Trim() + ".pdf").Trim(), userId, pwd); ArrayList array = new ArrayList(); array.Add(s); array.Add(s.Replace(".pdf", ".xls")); array.Add(s.Replace(".pdf", ".xlsx")); foreach (string file_name in array) { if (File.Exists(file_name)) { File.Delete(file_name); } } } } else if (row["CERTI_TYPE_CODE"].ToString() == "21") { paramValue1 = row["ORDER_NO"].ToString(); paramValue = row["CERTI_BILL_NO"].ToString(); paramValue2 = row["CERTI_PRINT_NO"].ToString(); //Hashtable myHT = new Hashtable(); //myHT.Add("CERTI_PRINT_NO", row["CERTI_PRINT_NO"].ToString()); EP.ExportPDF pdf = new EP.ExportPDF(); //s = pdf.ExportReportFileSingleSheet("QMTCHP11", myHT); s = pdf.ExportReportFile("QMTCHP13", "@" + "CERTI_PRINT_NO" + "@$$" + paramValue2); UploadFile(userId, pwd, s, uri + "/" + "EC." + paramValue.Trim() + "." + paramValue1.Trim() + ".HD.pdf", paramValue2); //basepdf64 = DownLoadFile((paramValue.Trim() + ".pdf").Trim(), (uri + "/" + paramValue.Trim() + ".pdf").Trim(), userId, pwd); ArrayList array = new ArrayList(); array.Add(s); array.Add(s.Replace(".pdf", ".xls")); array.Add(s.Replace(".pdf", ".xlsx")); foreach (string file_name in array) { if (File.Exists(file_name)) { File.Delete(file_name); } } } else { this.EFMsgInfo = "请选择正确的质保书模板" + row["CERTI_PRINT_NO"]; return; } if (j == 3) { System.Threading.Thread.Sleep(15 * 1000); j = 0; } j++; this.EFMsgInfo = "当前已上传至打印号" + row["CERTI_PRINT_NO"].ToString(); } } catch (Exception ex) { this.EFMsgInfo = ex.Message; } }
qq_39702560 2019-10-10
  • 打赏
  • 举报
回复
我代码是这样的
引用
private void FormQMTCHP20_EF_DO_F6(object sender, EF.EF_Args e) { try { string basepdf64; string s; string fileName; string paramValue; string paramValue1; string paramValue2; EI.EIInfo inInfo = new EI.EIInfo(); inInfo.Tables[0].Merge(this.efDevGrid4.GetSelectedDataRow()); if (inInfo.Tables[0].Rows.Count == 0) { this.EFMsgInfo = GC.GCRS.GCRSC0000014/*请选择需操作的记录。*/; return; } foreach (DataRow row in inInfo.Tables[0].Rows) { if (row["CERTI_BILL_NO"].ToString() == null) { this.EFMsgInfo = "存在质保书单据号为空的数据!"; return; } if (row["COMPANY_NAME"].ToString().Trim() == "0") { this.EFMsgInfo = "必须审核完成才能进行PDF操作!" + row["CERTI_PRINT_NO"].ToString(); return; } } int j = 0; foreach (DataRow row in inInfo.Tables[0].Rows) { if (row["CERTI_TYPE_CODE"].ToString() == "10") { paramValue1 = row["ORDER_NO"].ToString(); paramValue = row["CERTI_BILL_NO"].ToString(); paramValue2 = row["CERTI_PRINT_NO"].ToString(); //Hashtable myHT = new Hashtable(); //myHT.Add("CERTI_PRINT_NO", row["CERTI_PRINT_NO"].ToString()); //MessageBox.Show(uri.ToString()); EP.ExportPDF pdf = new EP.ExportPDF(); s = pdf.ExportReportFile("QMTCHP11", "@" + "CERTI_PRINT_NO" + "@$$" + paramValue2); UploadFile(userId, pwd, s, uri + "/" + "EC." + paramValue.Trim() + "." + paramValue1.Trim() + ".HA.pdf", paramValue2); //basepdf64 = DownLoadFile((paramValue.Trim() + ".pdf").Trim(), (uri + "/" + paramValue.Trim() + ".pdf").Trim(), userId, pwd); ArrayList array = new ArrayList(); array.Add(s); array.Add(s.Replace(".pdf", ".xls")); array.Add(s.Replace(".pdf", ".xlsx")); foreach (string file_name in array) { if (File.Exists(file_name)) { File.Delete(file_name); } } } else if (row["CERTI_TYPE_CODE"].ToString() == "20") { if (row["SHIP_CLASS_CODE"].ToString().Trim() == "CS") { paramValue1 = row["ORDER_NO"].ToString(); paramValue = row["CERTI_BILL_NO"].ToString(); paramValue2 = row["CERTI_PRINT_NO"].ToString(); //Hashtable myHT = new Hashtable(); //myHT.Add("CERTI_PRINT_NO", row["CERTI_PRINT_NO"].ToString()); EP.ExportPDF pdf = new EP.ExportPDF(); //s = pdf.ExportReportFileSingleSheet("QMTCHP11", myHT); s = pdf.ExportReportFile("QMTCBW11", "@" + "CERTI_PRINT_NO" + "@$$" + paramValue2); UploadFile(userId, pwd, s, uri + "/" + "EC." + paramValue.Trim() + "." + paramValue1.Trim() + ".HB.pdf", paramValue2); //basepdf64 = DownLoadFile((paramValue.Trim() + ".pdf").Trim(), (uri + "/" + paramValue.Trim() + ".pdf").Trim(), userId, pwd); ArrayList array = new ArrayList(); array.Add(s); array.Add(s.Replace(".pdf", ".xls")); array.Add(s.Replace(".pdf", ".xlsx")); foreach (string file_name in array) { if (File.Exists(file_name)) { File.Delete(file_name); } } } else { paramValue1 = row["ORDER_NO"].ToString(); paramValue = row["CERTI_BILL_NO"].ToString(); paramValue2 = row["CERTI_PRINT_NO"].ToString(); //Hashtable myHT = new Hashtable(); //myHT.Add("CERTI_PRINT_NO", row["CERTI_PRINT_NO"].ToString()); EP.ExportPDF pdf = new EP.ExportPDF(); //s = pdf.ExportReportFileSingleSheet("QMTCHP11", myHT); s = pdf.ExportReportFile("QMTCHP12", "@" + "CERTI_PRINT_NO" + "@$$" + paramValue2); UploadFile(userId, pwd, s, uri + "/" + "EC." + paramValue.Trim() + "." + paramValue1.Trim() + ".HC.pdf", paramValue2); //basepdf64 = DownLoadFile((paramValue.Trim() + ".pdf").Trim(), (uri + "/" + paramValue.Trim() + ".pdf").Trim(), userId, pwd); ArrayList array = new ArrayList(); array.Add(s); array.Add(s.Replace(".pdf", ".xls")); array.Add(s.Replace(".pdf", ".xlsx")); foreach (string file_name in array) { if (File.Exists(file_name)) { File.Delete(file_name); } } } } else if (row["CERTI_TYPE_CODE"].ToString() == "21") { paramValue1 = row["ORDER_NO"].ToString(); paramValue = row["CERTI_BILL_NO"].ToString(); paramValue2 = row["CERTI_PRINT_NO"].ToString(); //Hashtable myHT = new Hashtable(); //myHT.Add("CERTI_PRINT_NO", row["CERTI_PRINT_NO"].ToString()); EP.ExportPDF pdf = new EP.ExportPDF(); //s = pdf.ExportReportFileSingleSheet("QMTCHP11", myHT); s = pdf.ExportReportFile("QMTCHP13", "@" + "CERTI_PRINT_NO" + "@$$" + paramValue2); UploadFile(userId, pwd, s, uri + "/" + "EC." + paramValue.Trim() + "." + paramValue1.Trim() + ".HD.pdf", paramValue2); //basepdf64 = DownLoadFile((paramValue.Trim() + ".pdf").Trim(), (uri + "/" + paramValue.Trim() + ".pdf").Trim(), userId, pwd); ArrayList array = new ArrayList(); array.Add(s); array.Add(s.Replace(".pdf", ".xls")); array.Add(s.Replace(".pdf", ".xlsx")); foreach (string file_name in array) { if (File.Exists(file_name)) { File.Delete(file_name); } } } else { this.EFMsgInfo = "请选择正确的质保书模板" + row["CERTI_PRINT_NO"]; return; } if (j == 3) { System.Threading.Thread.Sleep(15 * 1000); j = 0; } j++; this.EFMsgInfo = "当前已上传至打印号" + row["CERTI_PRINT_NO"].ToString(); } } catch (Exception ex) { this.EFMsgInfo = ex.Message; } }
正怒月神 2019-10-10
  • 打赏
  • 举报
回复
List<string>是泛型的,不用装箱拆箱 ArrayList 要装箱拆箱
qq_39702560 2019-10-10
  • 打赏
  • 举报
回复
引用 3 楼 wanghui0380的回复:
问错了问题,不管什么语言,什么框架都的要内存,问题的关键不是什么内存占用如何,问题得关键是你什么时候不使用他 如果他是静态的,他会一直在内存,除非你直接null掉,clear掉 如果是他是非静态的,你得确定什么时候,没有任何地方用他。虽然你问得是“我有个循环”,但是我们要问得是,除了这个循环,还有谁用他没有
因为我在其他地方看到后者会根据内容自动开辟内存空间开销大,容易出现内存溢出的现象,但前者相对来说可尽量避免这种问题,但是我实在看不出来这两者有什么区别所以这样问
qq_39702560 2019-10-10
  • 打赏
  • 举报
回复
因为我在其他地方看到后者会根据内容自动开辟内存空间开销大,容易出现内存溢出的现象,但前者相对来说可尽量避免这种问题,但是我实在看不出来这两者有什么区别所以这样问
github_36000833 2019-10-10
  • 打赏
  • 举报
回复
内存溢出跟具体使用了List<string>或ArrayList关系不大。 内存溢出跟你如何使用list有关系。
wanghui0380 2019-10-10
  • 打赏
  • 举报
回复
问错了问题,不管什么语言,什么框架都的要内存,问题的关键不是什么内存占用如何,问题得关键是你什么时候不使用他 如果他是静态的,他会一直在内存,除非你直接null掉,clear掉 如果是他是非静态的,你得确定什么时候,没有任何地方用他。虽然你问得是“我有个循环”,但是我们要问得是,除了这个循环,还有谁用他没有
qq_39702560 2019-10-10
  • 打赏
  • 举报
回复
引用 1 楼 github_36000833的回复:
区别不大。 垃圾回收会进行清理。
可是这样容易报内存溢出,有什么好的解决方法吗
github_36000833 2019-10-10
  • 打赏
  • 举报
回复
区别不大。 垃圾回收会进行清理。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧