Трудовые будни

Сложность окружающего мира продолжает пугать.

Переставил я тут винды, свил гнездо, утоптал, поставил нужных программ, сел в кресло, налил кофию, поерзал, вот думаю поработаю сейчас.

Проверю, например, как выглядит свежеустановленный RawDigger на свежеустановленной же системе и не надо ли поправить чего, что будет пугать нового юзера.

Запускаю инсталлятор, то, се, иконка RD на десктопе, даблкликаю на нее. И НИЧЕГО. Опаньки!

Еще кликаю. Опять ничего. Еще кликаю. Ничего.

Потом, когда я уже пригорюнился, раз и запустились три RawDigger-а. Хм. Антивирус долго проверял впервые запущенную программу? Вырубаю антивирус, кликаю, запускается сразу. Ага? Оно? Ну таки да, был 2014-й касперский, сейчас 2015-й. Сдаунгрейдил, перезагрузился.

Кликаю на иконку RD. И НИЧЕГО. Выключаю антивирус, кликаю. И НИЧЕГО.

Беру виртуальную машину со свежеустановленной Win7, кою держу для опытов, ставлю туда RD, запускается мгновенно. Опаньки!

Пока я это делал - в физической машине завелись две копии RD. Ну секунд 20 (или 40, не считал) тормозят и заводятся. После того как одна завелась - запускаются сразу.

Чукча умный, он знает что странные таймауты - это обычно DNS. Смотрю в настройки. На физической машине - ручками, на виртуальной - по DHCP, но настройки DNS одинаковы. Интересно.

Запускаю RawDigger еще раз, смотрю в список процессов, он там есть сразу (то есть не антивирус), снимаю с живого процесса дамп. Загоняю дамп в отладчик. Вижу строчку, которая тормозит:

        QList<QNetworkProxy> proxies = QNetworkProxyFactory::systemProxyForQuery(q);

Дальше все очевидно и понятно. Control Panel - Internet Options - Connections - LAN Settings.

Ставишь Automatically detect (умолчание у винды) - тормозит. Снимаешь - не тормозит. Понятно, в нормальной ситуации этот автомат у меня отрублен, вот я никогда такого и не видел.

Ну и в программе что делать понятно - унести инициализацию в другой thread или, как я сделал, инициализировать при первом обращении к сети (что тоже в другом thread, впрочем, но и "обращение к сети" у стандартно настроенного RD - раз в неделю). Уже унес (в FRV унесем в следующей версии).

Почитал я про Web Proxy Autodiscovery и стало понятно, отчего в виртуальной машине не тормозит: она получает все по DHCP и, вероятнее всего (проверять не стал), по DNS/http этот самый wpad.dat не пытается найти. А физическая машина живет без DHCP, со статическими адресами, а значит autodiscovery может только по DNS.

Аналогично, понятно отчего "тормозит/не тормозит". Потому что есть Negative cache и отсутствие wpad.lexa.ru запоминается на какое-то время.

Еще одно знание, которого я бы хотел не знать.

На самом деле, конечно, дело еще и в Qt. Которая ставит флаги "ходить по DNS/DHCP" для WinHttpGetProxyForUrl. Из лучших, конечно же, соображений.

В комментариях к этому коду в Qt еще написано, что винда ходит по каждому сетевому интерфейсу отдельно (для DHCP, наверное?), это тоже многое объясняет, в боевой машине интерфейсов 7 штук, в виртуальных, понятно, по одному.

Comments

> Потом, когда я уже пригорюнился, раз и запустились три RawDigger-а.

Ага! Отлились кошке мышкины слезы.

> Ставишь Automatically detect (умолчание у винды) - тормозит. Снимаешь - не тормозит.
> Понятно, в нормальной ситуации этот автомат у меня отрублен

Ну он не мешает в гражданской жизни.

Ну таки да, отлились. Но кто ж мог ожидать ТАКОГО?

У меня ж есть старая формулировка: как много есть вещей, которых я бы ХОТЕЛ БЫ НЕ ЗНАТЬ!

Ну и вообще - если вы страдали от этого, то что ж молчали?