C#里ArrayList<String> list = new ArrayList<String>();与 使用ArrayList   list= new ArrayList()如果把这两者放一个循环里在内存占用消耗上有什么区别???

解决方案 »

  1.   

    问错了问题,不管什么语言,什么框架都的要内存,问题的关键不是什么内存占用如何,问题得关键是你什么时候不使用他
    如果他是静态的,他会一直在内存,除非你直接null掉,clear掉如果是他是非静态的,你得确定什么时候,没有任何地方用他。虽然你问得是“我有个循环”,但是我们要问得是,除了这个循环,还有谁用他没有
      

  2.   

    内存溢出跟具体使用了List<string>或ArrayList关系不大。内存溢出跟你如何使用list有关系。
      

  3.   

    List<string>是泛型的,不用装箱拆箱
    ArrayList 要装箱拆箱
      

  4.   

     我代码是这样的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;
                }
            }
      

  5.   

    我的代码是这样的麻烦你帮我看看 
    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;
                }
            }
      

  6.   

    麻烦你帮我看下上面的代码,看看和哪个有关系 
    和UploadFile方法有关系,内部记得释放stream之类的
      

  7.   

    建议你用内存工具(我用的.NET Memory Profiler)看下哪个实例没有释放掉。
      

  8.   

    可能是你这段代码引发的OOM,但是不一定是你这里没有及时释放出内存的原因,你可能正好在new新的对象时达到了临界点而已,最好是监控一下各模块的内存使用情况