C#Windows服务内存使用量稳步增长

时间:2016-05-20 02:13:29

标签: c# memory-leaks

我不知道这是不是问题,但......

这是Windows服务中的主要调用。 较低级别登录到WebService,检索信息并将其传递。

计时器每分钟打4次主呼叫。

第2代堆大小逐渐增加。 GC做到了最好,所以你最终得到了一种Saw Tooth记忆消耗,但是Saw Tooth的渐变渐渐向上。工作集和私有字节也增加。 然而,LOH尺寸是一致的。

罪魁祸首似乎是系统。字节[]。

ANTS Memory Profiler显示没有显示任何程序对象的链接。即保留图仅提及系统对象。

Profiler显示60%被 System.Collections.Concurrent.ConcurrentStack,T>持有。 + Node 其他40%分为其他系统类。

我已经重构,直到我脸色发青。行为似乎是一致的,让我觉得也许这不是一个问题,而是预期的行为。

如果我在标记的分配之前返回,那么如果我在分配后立即返回消耗是“错误的”,则内存消耗是“正确的”

所以... 这是一个真正的问题,如果有的话,欢迎提出任何建议。

 public  void GetItsValues()
    {
        using (Dt dt = new Dt())
        {

            List<ItsSite> siteList = dt.GetCurrentItsSites().ToList();
            IEnumerator<ItsSite> enSite = siteList.GetEnumerator();
            while (enSite.MoveNext())
            {
                using (ClsItsParking its = new     ClsItsParking(enSite.Current))
                {

                    List<ClsPbpRegistration> resultList;
                    //ClsPbpRegistration[] reglist = its.PbpRegistrationsBySite(enSite.Current).ToArray();
                    resultList = its.PbpRegistrationsBySite(enSite.Current);//***THIS Assignment causes the problem


                    if (resultList.Any())
                    {
                        using (Dt dtSite = new Dt(enSite.Current.ConnectionString))
                        {
                            // var result = dtSite.WriteItsPurchases(reglist);
                            var result = dtSite.WriteItsPurchases(resultList);
                            if (!result)
                                ClsLogger.WriteErrorLog("dt.WritePurchases returned false for site " + enSite.Current.CompanyName);
                        }
                    }
                }
            }
        }

    }

抱歉发布代码不太好。

dt.GetITSPURCHASE,GetCurrentItsSites签名和PbpRegistrationBySite正文

 public IEnumerable<ItsSite> GetCurrentItsSites()

 public ClsPbpRegistration[] GetItsPurchases(DateTime purchaseDate)


 public List<ClsPbpRegistration> PbpRegistrationsBySite(ItsSite site)
    {
        string regUrl = null;
        try
        {
            if (!Logon(site))
                ClsLogger.WriteErrorLog("ClsItsParking. Logon returned false");

            /**** Working Code*****/
            TimeSpan tWindow = new TimeSpan(0, TimeWindowMinutes, 0);
            DateTime startDate = DateTime.Now - tWindow;
            string startHour = startDate.Hour.ToString("00");
            string startMinute = startDate.Minute.ToString("00");

            DateTime endDate = DateTime.Now;
            string endHour = endDate.Hour.ToString("00");
            string endMinute = endDate.Minute.ToString("00");

            string toDaysPurchases = "?searchFromDate=" + startDate.ToString(DateFormat) +
                               "&searchFromTimeHour=" + startHour + "&searchFromTimeMinute=" + startMinute + "&searchToDate=" + endDate.ToString(DateFormat)
                               + "&searchToTimeHour=" + endHour + "&searchToTimeMinute=" + endMinute + "&searchBy=modified";




            regUrl = site.UrlBase + site.RegistrationListExtension + toDaysPurchases;


            string registrationResponseString;
            registrationResponseString = HttpGetRequest(regUrl, Cookies, ItsUserAgent);
            {

                Logoff();

                if (!string.IsNullOrEmpty(registrationResponseString))
                {
                    XmlDocument motherShipRegistrations = new XmlDocument();

                    motherShipRegistrations.LoadXml(registrationResponseString);

                    //listRegistrations = GetNodeList(motherShipRegistrations);
                    //ClsPbpRegistration[] listRegistrations = GetRegistrationList(motherShipRegistrations);
                    //return null;
                    //return listRegistrations;
                    return GetRegistrationList(motherShipRegistrations);
                }


                return null;
            }

        }
        catch (Exception ex)
        {

            ClsLogger.WriteErrorLog("PbpRegistrationsBySite " + ex.Message + " Sent url was " + regUrl);
            return null;

        }
    }

0 个答案:

没有答案