Производительность XML Reader - PullRequest
       40

Производительность XML Reader

1 голос
/ 27 августа 2010

Я проследил вялость своего приложения до фрагмента кода, который рассчитан ниже.Я знал, что это будет медленная точка, но каждый запрос занимает в среднем 1 секунду.Кусок xml, который я ищу, всегда находится в первом теге, поэтому я не думаю, что мне нужны времена загрузки.хотите или меня ограничивает сервер, с которого я загружаю XML-файлы?

Спасибо.

Ответы [ 4 ]

3 голосов
/ 27 августа 2010

Я думаю, что вы измеряете время, необходимое для создания соединения. Чтобы подтвердить это, вы можете переместить строки Reset + Start выше уровня чтения. Я ожидаю, что будет мало или нет разницы.

Если это время соединения, это зависит от сети, и в вашем коде есть примечания, которые вы можете сделать. Может быть, вы можете получить некоторые улучшения от настройки ваших сетевых настроек. Но это для другого форума.

1 голос
/ 27 августа 2010

Я сравнил ваш метод с другим.Просто загрузите данные и найдите идентификатор с помощью регулярного выражения.

        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 лучше :).

1 голос
/ 27 августа 2010

, поэтому я не думаю, что это время загрузки, которое мне дает

Чтобы подтвердить это, вы подумали, что вы скачали файл локально, а затем посмотрели, какое сейчас время

1 голос
/ 27 августа 2010

Попробуйте установить

reader.XmlResolver = null;
...