.Net Windows服务内存使用情况

时间:2014-02-04 13:35:00

标签: c# .net web-services windows-services wsdl

我有一个用C#编写的Windows服务。 它只有一个工作:它每30秒调用一次wsdl Web服务,并且不会将任何数据保存在内存中。 但是,几周后,它使用了近1GB的系统内存。它不会在内存中存储任何数据,我每隔1分钟运行一次GC。 为什么它会使用如此高的内存?

这是我的代码示例:

//this function is called by System.Timers.Timer 
    static bool GenerateAndSendXML(string agentName)
            {
                bool status = false;
                try
                {

                    string xmlMsg = "<?xml version=\"1.0\"?>" +
                                         @"<test>
                                        <SignalType>StatusSignal</SignalType>
                                        <AgentName>" + agentName.Trim() + @"</AgentName>

                                </test>";
                    var ir = new StatusSoapClient();//WSDL service
                    XmlElement xml = ir.ImportXml(xmlMsg);

                    string ReturnCode = "", ExpMessage = "";

                    for (int i = 0; i < xml.ChildNodes.Count; i++)
                    {
                        if (xml.ChildNodes[i].Name == "ReturnCode") ReturnCode = xml.ChildNodes[i].InnerText.ToUpperInvariant().ToString();
                        if (xml.ChildNodes[i].Name == "ExpMessage") ExpMessage = xml.ChildNodes[i].InnerText.ToUpperInvariant().ToString();

                    }


                    if (ReturnCode == "1")
                        status = true;
                    else
                        status = false;
                    Functions.WriteServiceLog(xmlMsg, ReturnCode, ExpMessage);
                }
                catch (Exception ex)
                {
                    Functions.WriteErrorLog(ex);//nlog function
                }

                return status;
            }

谢谢,

2 个答案:

答案 0 :(得分:1)

我不知道究竟出了什么问题,但是如果你的客户端调用wcf服务而不是你应该如下编码,则意味着使用using关键字正确地删除对象

 using (CalculatorClient client = new CalculatorClient())
        {
            // Call Divide and catch the associated Exception.  This throws because the
            // server aborts the channel before returning a reply.
            try
            {
                client.Divide(0.0, 0.0);
            }
            catch (CommunicationException e)
            {
                Console.WriteLine("Got {0} from Divide.", e.GetType());
            }
        }

答案 1 :(得分:0)

此方法是否将xmlMsg调用到某个集合中?

Functions.WriteServiceLog(xmlMsg, ReturnCode, ExpMessage);