Web Service中的静态XML解析方法占用了太多内存?

时间:2011-03-29 13:58:57

标签: .net xml web-services xml-parsing

我有一个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的列表。通过对每个解析进行任何更改,内存是否已分配且永不释放?

1 个答案:

答案 0 :(得分:0)

我也有类似的问题。当我将来自HttpWebResponse的StreamReader响应写入某个字符串时,它会分配大量内存(大约100&#39; 000行xml,响应它达到800 MB)。实际数据不是很大,我不知道该怎么做。

我不使用静态类和方法。我在调试中看到的是&#34;巨大的&#34;分配发生在一个特定的响应上,而解除分配依赖于垃圾收集逻辑(恕我直言)。

现在我尝试以某种方式划分数据。如果我有一些结果,我会更新这篇文章。

(抱歉答案不清楚,我无法将其添加为评论)