Всем привет!
Есть примерно такой код:
var ipAddress = Dns.GetHostAddresses(Address)[0];
var ipEndPoint = new IPEndPoint(ipAddress, Port);
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(ipEndPoint);
var networkStream = new NetworkStream(socket, false);
...
отправляем запрос к серверу (jabber)
получаем от него вот такой xml:
<stream:stream xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client" from="server" id="873f8713" xml:lang="en" version="1.0">
<stream:features>
<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"></starttls>
<mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<mechanism>NTLM</mechanism>
<mechanism>PLAIN</mechanism>
<mechanism>ANONYMOUS</mechanism>
</mechanisms>
<compression xmlns="http://jabber.org/features/compress">
<method>zlib</method>
</compression>
<auth xmlns="http://jabber.org/features/iq-auth" />
<register xmlns="http://jabber.org/features/iq-register" />
</stream:features>
</stream:stream>
начинаем его читать (в основном потоке, консольное приложение)
xmlReader = new XmlTextReader(networkStream);
while (!xmlReader.EOF && xmlReader.Read())
{
if (xmlReader.NodeType == XmlNodeType.Element)
{
var answer = XElement.Load(xmlReader);
}
}
Попытка считать этот xml (stream:stream) целиком (неважно как, пробовал и xmlReader.ReadInnerXml(), и xmlDocumet.Load(xmlReader), и xmpTextReader.GetReminder()) занимает 4-5 минут!!!
Если на первой итерации цикла не запрашивать весь xml, а загружать его со следующего тэга (весь stream:features) — то все происходит очень быстро.
И все последующие приходящие xml тоже быстро читаются, даже больших размеров, таких задержек больше нет.
Почему такой затык по времени при первом чтении всего xml??? Как это можно побороть?
Здравствуйте, mDmitriy, Вы писали:
D>Почему такой затык по времени при первом чтении всего xml??? Как это можно побороть?
Посмотри фидлером куда идут запросы и, если есть запросы к джабер.орг, то смотри в сторону
xmlurlresolver .
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 67>>
Здравствуйте, _Raz_, Вы писали:
_R_>Здравствуйте, mDmitriy, Вы писали:
D>>Почему такой затык по времени при первом чтении всего xml??? Как это можно побороть?
_R_>Посмотри фидлером куда идут запросы и, если есть запросы к джабер.орг, то смотри в сторону xmlurlresolver .
не вижу запросов к джабер.орг.
установки xmlReaderSetting такие:
xmlReaderSettings.ConformanceLevel = ConformanceLevel.Fragment;
xmlReaderSettings.DtdProcessing = DtdProcessing.Ignore;
xmlReaderSettings.IgnoreComments = true;
xmlReaderSettings.ValidationFlags = XmlSchemaValidationFlags.None;
xmlReaderSettings.ValidationType = ValidationType.None;
xmlReaderSettings.XmlResolver = null;
Странно, что если читать по нодам, то все очень быстро.
А что можно подправить через xmlurlresolver? и как?