Страница 11 из 12

Re: Разбивка выделения при закачке на части

СообщениеДобавлено: 20 май 2016, 13:03
vdemidov
zed писал(а): Может это wininet так шутит, не знаю.

Скорее всего именно он. Была еще проблема у vasketsov с подключением к прокси

Re: Разбивка выделения при закачке на части

СообщениеДобавлено: 20 май 2016, 13:08
zed
Да, wininet во всём виноват: https://support.microsoft.com/en-us/kb/183110

Решается установкой максимального лимита на процесс:
Код: Выделить всё
const
  INTERNET_OPTION_MAX_CONNS_PER_SERVER = 73;
  INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER = 74;
var
  buf: ULONG;
  res: Boolean;
begin
  buf := 50;
  res := InternetSetOption(nil, INTERNET_OPTION_MAX_CONNS_PER_SERVER, @buf, SizeOf(buf));
  buf := 50;
  res := InternetSetOption(nil, INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER, @buf, SizeOf(buf));
end.

Теперь надо придумать, куда это вкорячить, чтобы оно срабатывало до того, как выполнится хоть один запрос.

Re: Разбивка выделения при закачке на части

СообщениеДобавлено: 20 май 2016, 14:38
zed
zed писал(а):Решается установкой максимального лимита на процесс:

Пофиксил.
Simultaneous connections limit

Всё-таки это лимит не соединений, а запросов. Установленных открытых соединений с сервером может быть больше, чем параллельных запросов из-за алиасов. Если у карты только один хост, без алиасов, то да, всё просто: один запрос = одно соединение. В противном же случае, соединений может быть до: (Число алиасов) * (Число MaxConnectToServerCount). Соединения держит WinInet для keep-alive запросов. Если соединения будут рваться после каждого запроса, то превышения соединений над запросами не будет.

Предлагаю назвать: Max simultaneous requests number / Макс число параллельных запросов. Для ясности, можно ещё подписать HTTP(S)-requests, вместо requests.

Re: Разбивка выделения при закачке на части

СообщениеДобавлено: 20 май 2016, 15:39
Tolik
Как всё запутано...
Max simultaneous requests number - не годится, т.к. запросы не могут быть одновременными: запрос - это не длительный процесс (как сессия), а только отправленный пакет.
Думаю, всем будет проще, если использовать привычный Max connect to server count, что бы это ни значило...

Re: Разбивка выделения при закачке на части

СообщениеДобавлено: 20 май 2016, 16:07
zed
Запрос вполне себе длительный процесс. Словосочетание довольно распространено:

http://serverfault.com/questions/75054/ ... -to-handle
https://docs.oracle.com/cd/E19857-01/82 ... index.html

Или ещё можно вот так: Max concurrent http(s)-requests number

Re: Разбивка выделения при закачке на части

СообщениеДобавлено: 20 май 2016, 16:39
Tolik
А так мне нравится :)

Re: Разбивка выделения при закачке на части

СообщениеДобавлено: 20 май 2016, 19:52
zed
Изменения в ночнушке.

Re: Разбивка выделения при закачке на части

СообщениеДобавлено: 21 май 2016, 12:09
zed
Нашёл и исправил парочку багов:
- если запустить закачку в двух и более окошках (для одной карты), а потом закрыть одно из них во время закачки, второе затормаживалось на 30 сек.
- если при разделении области, какому-то окошку не доставалось ни одного тайла для обработки, вываливалась ошибка.

Изменения в ночнушке.

Re: Разбивка выделения при закачке на части

СообщениеДобавлено: 26 май 2016, 20:43
Parasite
Вроде бы работает так, как требуется. Откровенных багов пока не выявлено.
Пожелание: в гуе, рядом с окошком выбора числа потоков - возможно ли писать текущий MaxConnectToServerCount, если он был задан в ZMP (и, соответственно, не давать ввести цифирку больше оного)?

Re: Разбивка выделения при закачке на части

СообщениеДобавлено: 26 май 2016, 21:43
zed
А точно, всегда нужно ограничиваться этим числом? Сейчас там по дефолту число устанавливается на MaxConnectToServerCount при открытии окна операции с областью. Могу сделать, чтобы оно реагировало на смену карты и менять верхнюю границу на этот дефолт. Делать дополнительные надписи нет необходимости.