我有一个用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;
}
谢谢,
答案 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);