XML阅读器性能

时间:2010-08-26 21:45:32

标签: c# asp.net xml xmlreader xmltextreader

我已经在我的应用程序中追踪到了下面的定时代码。我知道这将是一个缓慢的点,但每个请求平均需要1秒。我所追求的xml位总是在第一个标签中,所以我认为这不是下载时间。

Stopwatch stopwatch = new Stopwatch();
XmlTextReader reader = new XmlTextReader("http://steamcommunity.com/id/test?xml=1");

stopwatch.Reset();
stopwatch.Start();

while (reader.Read()) {
 if (reader.Name.Equals("steamID64")) {
  reader.Read();

  stopwatch.Stop();

  time = stopwatch.ElapsedMilliseconds();
  return Convert.ToInt64(reader.Value);
 }
}

是否有更快的方式来读取我想要的标签,或者我是否受到服务器的限制我正在从中下载xml文件?

感谢。

4 个答案:

答案 0 :(得分:3)

我认为您正在衡量创建连接所需的时间。要确认这一点,您可以将Reset + Start行移动到读者创建的上方。我希望会有很少或没有区别。

如果是连接时间,则由网络决定,您可以在代码中执行此操作。也许你可以从推文网络设置中获得一些改进。但那是另一个论坛。

答案 1 :(得分:1)

尝试设置

reader.XmlResolver = null;

答案 2 :(得分:1)

  

所以我认为没有下载时间让我

要确认这一点,您是否考虑过在本地下载文件然后查看时间

答案 3 :(得分:1)

我将您的方法与另一种方法进行了比较。只需下载数据并通过正则表达式查找id。

        System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
        stopwatch.Reset();
        stopwatch.Start();

        System.Net.WebClient wc = new System.Net.WebClient();
        string s = wc.DownloadString("http://steamcommunity.com/id/test?xml=1");
        System.Text.RegularExpressions.Regex re = new Regex("\\<steamID64\\>(\\d+)\\</steamID64\\>");
        System.Text.RegularExpressions.Match m = re.Match(s);
        if (m != null && m.Captures.Count != 0) Response.Write("steamID64: " + m.Captures[0].Value + " <br/>");
        stopwatch.Stop();

        long time = stopwatch.ElapsedMilliseconds;
        Response.Write("Time Elapsed (1):" + time.ToString() +" <br/>");

        stopwatch.Reset();
        stopwatch.Start();

        System.Xml.XmlTextReader reader = new System.Xml.XmlTextReader("http://steamcommunity.com/id/test?xml=1");

        stopwatch.Reset();
        stopwatch.Start();

        while (reader.Read())
        {
            if (reader.Name.Equals("steamID64"))
            {
                reader.Read();
                stopwatch.Stop();

                time = stopwatch.ElapsedMilliseconds;
                s = reader.Value;
                break;
            }
        }

        Response.Write("<br/>steamID64: " + s );
        Response.Write("<br/>Time Elapsed (2):" + time.ToString() + " <br/>");

**结果:

steamID64:76561197991558078 经过的时间(1):1572

steamID64:76561197991558078 经过的时间(2):969

XmlReader更好:)。