拼接xml时出现内存溢出解决办法

/// designed by Alex
                /// 解决内存溢出问题,不可使用迭代器和foreach
                /// 循环遍历List, 别生成xml,一边释放
                /// 反向遍历,相当于出栈,避免索引顺序乱的问题
                /// 反转List.
                if (zrate.RateList != null && zrate.RateList.Count != 0)
                {
                    log.Debug("反转list");
                    zrate.RateList.Reverse();
                    log.Debug("循环遍历Zrate List 生成xml");
                    int policySize = zrate.RateList.Count;
                    for (int index = policySize - 1; index > -1; index--)
                    {
                        SplitPolicy item = zrate.RateList[index];
                        string strChangePnr = item.IsChangePnr ? "1" : "0";
                        string strCabin = item.Cabin;
                        try
                        {
                            strCabin = strCabin.Replace("/", "");
                        }
                        catch { }
                        decimal c = item.Rate + item.RuleRate;
                        string d = item.IsAutoTicket ? "1" : "0";
                        string strWeekNum = item.WeekNum;
                        if (strWeekNum != "")
                        {
                            strWeekNum = strWeekNum.Replace("/", ",");
                        }
                        string ZtFlightNumber = "";
                        try
                        {
                            ZtFlightNumber = item.ApplyFlightNumber.Replace('/', ',');
                        }
                        catch { }
                        string ZtNoFlightNumber = "";
                        try
                        {
                            ZtNoFlightNumber = item.NotApplyFlightNumber.Replace('/', ',');
                        }
                        catch { }

                        string WorkTimeWeekDay = "";
                        string RefundWorkTimeWeekDay = "";
                        //工作时间
                        for (int i = 0; i < 5; i++)
                        {
                            WorkTimeWeekDay = WorkTimeWeekDay + item.WorkTimeWeekDay + ",";
                            RefundWorkTimeWeekDay = RefundWorkTimeWeekDay + item.RefundTimeWeekDay + ",";
                        }
                        //休息日
                        for (int i = 0; i < 2; i++)
                        {
                            WorkTimeWeekDay = WorkTimeWeekDay + item.WorkTimePlayDay + ",";
                            RefundWorkTimeWeekDay = RefundWorkTimeWeekDay + item.RefundTimePlayDay + ",";
                        }


                        info.Append("<Item Id='" + item.ID + "' State='" + item.Status + "' IsChangePnr='" + strChangePnr + "' ");
                        info.Append("ProviderWorkTime='" + WorkTimeWeekDay.Trim(',') + "' PorviderVWorkTime='" + RefundWorkTimeWeekDay.Trim(',') + "'>");
                        info.Append(item.DepartCode.Replace("/", ",") + "|" + item.ArriveCode.Replace("/", ",") + "|" + item.AirCompany + "|" + item.TripType + "|");
                        info.Append(ZtFlightNumber + "|" + ZtNoFlightNumber + "|" + strWeekNum + "|" + item.TicketType + "|");
                        info.Append(strCabin + "|" + c.ToString("0.000") + "|" + item.SaleBeginTime.ToString("yyyy-MM-dd") + ",");
                        info.Append(item.SaleEndTime.ToString("yyyy-MM-dd") + "|" + item.TravelBeginTime.ToString("yyyy-MM-dd") + ",");
                        info.Append(item.TravelEndTime.ToString("yyyy-MM-dd") + "|" + item.OfficeID + "|");
                        info.Append(item.AddTime.ToString("yyyy-MM-ddTHH:mm:ss.fff") + "|" + item.ModifyTime.ToString("yyyy-MM-ddTHH:mm:ss.fff") + "|");
                        info.Append(item.SupplierCode + "|" + item.Remark + "|" + d);
                        info.Append("</Item>");

                        //同时remove item
                        zrate.RateList.RemoveAt(index);
                        //每10000条调用一次gc,回收前一百条被remove的数据
                        if (0 == index % 10000)
                        {
                            GC.Collect();
                        }
                    }
                }
                else
                {
                    log.Error("zrate里的RateList为空!");
                }
            }
            else
            {
                info.Append("<OTA_Alter_AirFareRS>");
                info.Append("<Error Code=\"" + zrate.Msg + "\" ShortText=\"" + zrate.Msg + "\" />");
            }
            info.Append("</OTA_Alter_AirFareRS>");

            //WriteLog.WriteErrorLogDataInteraction(info.ToString(), "变动政策返回信息");
            log.Debug("返回xml成功");
            return info.ToString();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值