我有一个Web服务,它发出Web请求来获取XML,将其解析为自定义类并返回该类。作为我的第一选择,我使用所需的解析方法创建了一个帮助程序“XMLParser”,并使这些方法保持静态,因为我没有看到需要实例化和XMLParser类。但后来我开始怀疑这是否比它应该消耗更多的内存。建议?
修改
根据要求,一些代码。我简化了代码以直截了当。
正在调用WebMethod
[WebMethod]
public List<CustomObject> GetObjectList(int xmlID)
{
string xmlURL = URLBuilder.GetXmlURL(xmlID); // Also static method that builds and returns an URL
HttpWebRequest xmlRequest = (HttpWebRequest)WebRequest.Create(xmlURL);
xmlRequest.Method = "GET";
try
{
using (Stream responseStream = xmlRequest.GetResponse().GetResponseStream())
{
XmlDocument XML = new XmlDocument();
XML.Load(responseStream);
return XMLParser.GetCustomObjectList(XML);
}
}
catch
{
throw;
}
}
我担心的静态方法
public static List<CustomObject> GetCustomObjectList(XmlDocument XML)
{
XmlNodeList nodesList = XML.GetElementsByTagName("some_tag");
List<CustomObject> obj = new List<CustomObject>();
foreach (XmlNode listingNode in listingNodesList)
{
// Read Nodes and add CustomObjects to the obj List
}
return obj;
}
这将不断解析XML并返回CustomObject的列表。通过对每个解析进行任何更改,内存是否已分配且永不释放?
答案 0 :(得分:0)
我也有类似的问题。当我将来自HttpWebResponse的StreamReader响应写入某个字符串时,它会分配大量内存(大约100&#39; 000行xml,响应它达到800 MB)。实际数据不是很大,我不知道该怎么做。
我不使用静态类和方法。我在调试中看到的是&#34;巨大的&#34;分配发生在一个特定的响应上,而解除分配依赖于垃圾收集逻辑(恕我直言)。
现在我尝试以某种方式划分数据。如果我有一些结果,我会更新这篇文章。
(抱歉答案不清楚,我无法将其添加为评论)