понедельник, 10 июня 2013 г.

Медленная инициализация SSL в Qt на Windows

Если вы пишете сетевое приложение с помощью Qt и уже подложили SSL библиотеки в каталог с программой, и ваша программа успешно скачивает секретные данные по протоколу https, то вы могли заметить довольно медленную инициализацию приложения на Windows.

Если раньше ваша программа стартовала и начинала скачивание данных по http за 200 мс., то теперь с https это время увеличилось до 800 мс. (и это на Phenom II X6)! Задержка происходит в методе QNetworkAccessManager::get(). Использовав профайлер AQTime я выяснил, что основная задержка была внутри модуля QtNetwork в функции q_RAND_status(). После гугления стало ясно, что SSL инфраструктуру в программе лучше инициализировать чем раньше тем лучше, и это связано с кучей (heap) приложения.

Если ещё до создания объекта QApplication добавить следующий простой код, то инициализация программы сократится с 800 мс до 400 мс.:
int main(int argc, char *argv[])
{
    qDebug(QSslSocket::supportsSsl()
               ? "SSL is supported"
               : "SSL is not supported");

    QApplication app(argc, argv);

...
Ссылки:

Комментариев нет: