C#里ArrayList<String> list = new ArrayList<String>();與 使用ArrayList list= new ArrayList()如果把這兩者放一個回圈里在記憶體占用消耗上有什么區別???
uj5u.com熱心網友回復:
區別不大。垃圾回識訓進行清理。
uj5u.com熱心網友回復:
可是這樣容易報記憶體溢位,有什么好的解決方法嗎
uj5u.com熱心網友回復:
問錯了問題,不管什么語言,什么框架都的要記憶體,問題的關鍵不是什么記憶體占用如何,問題得關鍵是你什么時候不使用他如果他是靜態的,他會一直在記憶體,除非你直接null掉,clear掉
如果是他是非靜態的,你得確定什么時候,沒有任何地方用他。雖然你問得是“我有個回圈”,但是我們要問得是,除了這個回圈,還有誰用他沒有
uj5u.com熱心網友回復:
記憶體溢位跟具體使用了List<string>或ArrayList關系不大。記憶體溢位跟你如何使用list有關系。
uj5u.com熱心網友回復:
因為我在其他地方看到后者會根據內容自動開辟記憶體空間開銷大,容易出現記憶體溢位的現象,但前者相對來說可盡量避免這種問題,但是我實在看不出來這兩者有什么區別所以這樣問uj5u.com熱心網友回復:
因為我在其他地方看到后者會根據內容自動開辟記憶體空間開銷大,容易出現記憶體溢位的現象,但前者相對來說可盡量避免這種問題,但是我實在看不出來這兩者有什么區別所以這樣問
uj5u.com熱心網友回復:
List<string>是泛型的,不用裝箱拆箱ArrayList 要裝箱拆箱
uj5u.com熱心網友回復:
我代碼是這樣的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;
}
}
uj5u.com熱心網友回復:
我的代碼是這樣的麻煩你幫我看看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;
}
}
uj5u.com熱心網友回復:
記憶體溢位更這兩個沒什么關系uj5u.com熱心網友回復:
麻煩你幫我看下上面的代碼,看看和哪個有關系 ??
uj5u.com熱心網友回復:
和UploadFile方法有關系,內部記得釋放stream之類的
uj5u.com熱心網友回復:
占用的同時也要即使的釋放記憶體,不然都會溢位,看自己如何使用了。uj5u.com熱心網友回復:
建議你用記憶體工具(我用的.NET Memory Profiler)看下哪個實體沒有釋放掉。uj5u.com熱心網友回復:
記憶體溢位更這兩個沒什么關系
麻煩你幫我看下上面的代碼,看看和哪個有關系 ?
你看看是不是呼叫的方法里面有東西一直開著
uj5u.com熱心網友回復:
可能是你這段代碼引發的OOM,但是不一定是你這里沒有及時釋放出記憶體的原因,你可能正好在new新的物件時達到了臨界點而已,最好是監控一下各模塊的記憶體使用情況轉載請註明出處,本文鏈接:https://www.uj5u.com/net/109124.html
標籤:C#
上一篇:MVC路由的一個問題。根目錄下“Admin”控制器和 Areas的名也是“admin”該如何訪問根目錄下的admin控制器
