我已经在我的应用程序中追踪到了下面的定时代码。我知道这将是一个缓慢的点,但每个请求平均需要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文件?
感谢。
答案 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更好:)。