Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Эфективность использования Интернет 
:(
    Опции темы
infarch
Дата 25.4.2013, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: 1
Всего: 1



Я работаю над приложением типа веб-краулер. Задача - быстро скачать много страниц. И вот я заметил что приложение качает Х страниц с примерно с одинаковой скоростью, вне зависимости от того сколько экземпляров запущено. Я написал тестовую программу:
Код

    class Program
    {
        static string[] MakeLinks()
        {
            List<string> list = new List<string>();
            string url = "http://apache.org?x=" + DateTime.Now.Ticks; // так боремся с кешированием
            for (int i = 0; i < 500; i++)
            {
                list.Add(url + "&y=" + i);  // так боремся с кешированием
            }
            return list.ToArray();
        }

        static void B()
        {
            int c = 0;
            Stopwatch sw = new Stopwatch();
            var links = MakeLinks();
            List<Task<string>> tasks = new List<Task<string>>();
            sw.Start();
            foreach (string url in links)
            {
                Console.WriteLine(url);
                WebClient client = new WebClient();
                tasks.Add(client.DownloadStringTaskAsync(url));
            }
            foreach (var t in tasks)
            {
                t.Wait();
                c += t.Result.Length;
            }
            sw.Stop();
            Console.WriteLine("Downoaded {0} bytes. Download time: {1}", c, sw.Elapsed);

        }

        static void Main(string[] args)
        {
            B();
        }
    }


Запустил один экземпляр, время работы от 55-60 сек. Запустил 3 экземпляры, время работы 55-65 сек. Шесть экземпляров - 70 секунд примерно. Тобишь, время скачивания мало зависит от колличества экземпляров приложения. Пожалуй можно было и еще запускать.

А это мне не очень подходит. Я предпочел бы чтоб один запущенный экземпляр употребил весь доступный интернет и выполнил работу за 5 секунд :( Вот, прошу совета... Что тут не так, как полностью нагрузить сеть из одного экземпляра приложения?
PM MAIL   Вверх
Machaon
Дата 25.4.2013, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КаРолЬ АсьКи МуАЛя
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 12.8.2008
Где: М.о. Красногорск

Репутация: 3
Всего: 3



Если веб сервер настроен на определенное количество запросов страниц в заданный промежуток времени то никак запускай хоть 100 экземпляров прирост будет минимальным.
PM MAIL ICQ Skype   Вверх
infarch
Дата 25.4.2013, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: 1
Всего: 1



Это я понимаю. Но вы не внимательно прочитали - 6 экземпляров приложения, запущенных одновременно, отработали за почти то же самое время что и один экземпляр. Сервер отдал все без напряжения, ни одной ошибки небыло. Отсюда я делаю вывод что есть некий лимит на сетевые запросы для одного процесса. Иных вариантов в голову не приходит, увы (
PM MAIL   Вверх
Machaon
Дата 25.4.2013, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


КаРолЬ АсьКи МуАЛя
*


Профиль
Группа: Участник
Сообщений: 160
Регистрация: 12.8.2008
Где: М.о. Красногорск

Репутация: 3
Всего: 3



Один поток качает единовременно один файл.
чтобы загрузить весь канал получаш все ссылки которые тебе нужно скачать для каждый ссылки создаешь к примеру Экземпляр WebClient и запускаешь скачку всех ссылок одновременно но жать ресурсы будет мама негорюй.
PM MAIL ICQ Skype   Вверх
infarch
Дата 26.4.2013, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: 1
Всего: 1



Вы бы в код глянули, что ли... Там именно так и сделано.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0789 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.