Строка загрузки WebClient (страница с несколькими символами) очень медленная
Я пытаюсь загрузить строку из URL. К сожалению, это очень медленно.
Вот мой код:
// One of these types for two bad solutions anyway
// byte[] result = new byte[12];
// string result;
using (var webClient = new System.Net.WebClient())
{
String url = "http://bg2.cba.pl/realmIP.txt";
//result = webClient.DownloadString(url); // slow as hell
//webClient.OpenRead(url).Read(result, 0, 12); // even slower
}
Это занимает около 4-5 секунд, что мне кажется очень неуместным...
Содержание этого URL - IP
XX.YYY.ZZ.FF
3 ответа
Решение
Исправлено, извините за вопрос здесь, я думаю, но... здесь работает код
string result;
using (var webClient = new System.Net.WebClient())
{
webClient.Proxy=null;
String url = "http://bg2.cba.pl/realmIP.txt";
result = webClient.DownloadString(url);
}
Просто установите прокси в ноль
Это явно проблема с вами линии / ПК / брандмауэр
Вы можете проверить это онлайн:
это занимает около 500 миллисекунд
ОБНОВЛЕНИЕ после вашего собственного ответа
Если вы не хотите использовать прокси, вы должны использовать GetEmptyWebProxy(), как указано в msdn:
webClient.Proxy=GlobalProxySelection.GetEmptyWebProxy();
Я попробовал ваш код и добавил к нему вывод.
using (var webClient = new System.Net.WebClient())
{
Stopwatch timer = Stopwatch.StartNew();
String url = "http://bg2.cba.pl/realmIP.txt";
timer.Stop();
TimeSpan timespan = timer.Elapsed;
String tex1 = String.Format("{0:00}:{1:00}:{2:00}", timespan.Minutes, timespan.Seconds, timespan.Milliseconds / 10);
timer = Stopwatch.StartNew();
String result = webClient.DownloadString(url); // slow as hell
timespan = timer.Elapsed;
String tex2 = String.Format("{0:00}:{1:00}:{2:00}", timespan.Minutes, timespan.Seconds, timespan.Milliseconds / 10);
timer = Stopwatch.StartNew();
Stream stream = webClient.OpenRead(url);
timespan = timer.Elapsed;
String tex3 = String.Format("{0:00}:{1:00}:{2:00}", timespan.Minutes, timespan.Seconds, timespan.Milliseconds / 10);
timer = Stopwatch.StartNew();
byte[] result2 = new byte[12];
int val = webClient.OpenRead(url).Read(result2, 0, 12); // even slower
timespan = timer.Elapsed;
String tex4 = String.Format("{0:00}:{1:00}:{2:00}", timespan.Minutes, timespan.Seconds, timespan.Milliseconds / 10);
textBox1.Text = result;
t1.Text = tex1;
t2.Text = tex2;
t3.Text = tex3;
t4.Text = tex4;
}
со следующим результатом
Ваш код, кажется, в порядке. Проверьте свой брандмауэр и все, что с этим связано