Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Script. Интеграция WebKit _ WebKit утечка памяти. Проблемы с кэшем.

Автор: kwisp 14.7.2009, 8:24

#include <QApplication>
#include <QWebView>

int main(int a,char** b)
{
    QApplication app(a,b);
    QWebView view;
    QAction reloadAct(&view);
    reloadAct.setShortcut(QKeySequence(QObject::tr("CTRL+R")));
    QObject::connect(&reloadAct,SIGNAL(triggered()),&view,SLOT(reload()));
    view.addAction(&reloadAct);
    view.load(QUrl("http://www.qtsoftware.com"));
    view.show();
    return app.exec();
}


в принципе и всё.
жмешь "CTRL+R" и наблюдаешь картину утечки памяти. так же память утекает даже не при полной перезагрузке страницы, а если к примеру бегать табами по ссылкам.
http://www.qtsoftware.com/developer/task-tracker/index_html?method=entry&id=221840этот висит еще с 2008 года тролли не хотят его отрабатывать.
думал сначала что я такой кривой и чего то не досмотрел в описании, однако если взять браузер из %QTDIR%\domos\browser тоже память жрёт... с 42Мб с легкостью догна до 200Мб и походу предела нет. :(

Пробовал различные настройки QWebSettings тоже без результатов.
Память утекает даже если каждые десять минут удалять QWebView и создавать новый. Поэтому думаю что проблема с кэшем. У тролей нашел такой кусок кода:
QNetworkDiskCache *diskCache = new QNetworkDiskCache(this);
QString location = QDesktopServices::storageLocation(QDesktopServices::CacheLocation);
diskCache->setCacheDirectory(location);
networkAccessManager->setCache(diskCache);

пробовал устанавливать настроенный таким образом networkAccessManager в объект QWebPage -- без результатов.

Создал тролям таск с воплями о том что память утекает вроде пришло письмо. задаче назначен номер.
но всё же может есть у кого нитть идеи как работать с кэшем корректно??? может кто знает как пропатчить тролевский код???
я полез там конечно закручено прилично.

Автор: Litkevich Yuriy 14.7.2009, 8:59

kwisp, в случае подобных ситуаций, баг или подозрение на него. Следует указывать версию и Qt и ОСьки

Автор: kwisp 14.7.2009, 9:03

в таск трекере всё указано.
первый таск Qt 4.4.0.
у меня 4.5.1 сейчас.
память утекает как под линуксом так и под виндой.

Автор: SABROG 14.7.2009, 9:05

Профайлер такие результаты выдал
[I] Summary of all memory leaks... {64034 bytes, 2117 blocks}
    [W] MLK: Memory leak of 38016 bytes from 594 blocks allocated in D:\WORK\WEBVIEWMEMLEAK\DEBUG\QTWEBKITD4.DLL
            Distribution of leaked blocks
                 38016 bytes from 594 blocks of 64 bytes (first block: 0x0e1ae370)
            Allocation location
                malloc         [C:\WINDOWS\system32\MSVCRT.DLL]
                ???            [D:\WORK\WEBVIEWMEMLEAK\DEBUG\QTWEBKITD4.DLL ip=0x07B969A3]
    [I] MPK: Potential memory leak of 12068 bytes from 753 blocks allocated in Z7qMallocj [QTCORED4.DLL]
            Offset 0x00000008 referenced by 0x0e1ae254, a location in a malloc'd block
            Offset 0x00000008 referenced by 0x0ec533b0, a location in a malloc'd block
            Distribution of potentially leaked blocks
                 11968 bytes from 748 blocks of 16 bytes (first block: 0x0e1a6350)
                   100 bytes from 5 blocks of 20 bytes (first block: 0x0e1aadd8)
            Allocation location
                malloc         [C:\WINDOWS\system32\MSVCRT.DLL]
                Z7qMallocj     [D:\WORK\WEBVIEWMEMLEAK\DEBUG\QTCORED4.DLL]
    [W] MLK: Memory leak of 8232 bytes from 686 blocks allocated in ZNK9QWebFrame26qt_check_for_QOBJECT_macroIS_EEvRKT_ [QTWEBKITD4.DLL]
            Distribution of leaked blocks
                  8232 bytes from 686 blocks of 12 bytes (first block: 0x0e1ab3f8)
            Allocation location
                malloc         [C:\WINDOWS\system32\MSVCRT.DLL]
                ZNK9QWebFrame26qt_check_for_QOBJECT_macroIS_EEvRKT_ [D:\WORK\WEBVIEWMEMLEAK\DEBUG\QTWEBKITD4.DLL]
    [I] MPK: Potential memory leak of 4416 bytes from 69 blocks allocated in D:\WORK\WEBVIEWMEMLEAK\DEBUG\QTWEBKITD4.DLL
            Offset 0x00000014 referenced by 0x681c77d3, a location in a section in a loaded module
            Distribution of potentially leaked blocks
                  4416 bytes from 69 blocks of 64 bytes (first block: 0x0edcb738)
            Allocation location
                malloc         [C:\WINDOWS\system32\MSVCRT.DLL]
                ???            [D:\WORK\WEBVIEWMEMLEAK\DEBUG\QTWEBKITD4.DLL ip=0x07B969A3]
    [I] MPK: Potential memory leak of 1056 bytes from 4 blocks allocated in I_RpcBCacheFree [RPCRT4.DLL]
            Offset 0x00000038 referenced by 0x6a2a53d7, a location in a section in a loaded module
            Offset 0x00000038 referenced by 0x6a2a547f, a location in a section in a loaded module
            Offset 0x00000008 referenced by 0x00280600, a location in a section in a loaded module
            Distribution of potentially leaked blocks
                  1056 bytes from 4 blocks of 264 bytes (first block: 0x002670c8)
            Allocation location
                HeapAlloc      [C:\WINDOWS\system32\KERNEL32.DLL]
                I_RpcBCacheFree [C:\WINDOWS\system32\RPCRT4.DLL]
    [I] MPK: Potential memory leak of 108 bytes from 9 blocks allocated in ZNK9QWebFrame26qt_check_for_QOBJECT_macroIS_EEvRKT_ [QTWEBKITD4.DLL]
            Offset 0x00000008 referenced by 0x0f745af8, a location in a committed VirtualAlloc'd memory region
            Offset 0x00000008 referenced by 0x0f745af8, a location in a committed VirtualAlloc'd memory region
            Distribution of potentially leaked blocks
                   108 bytes from 9 blocks of 12 bytes (first block: 0x0eed5278)
            Allocation location
                malloc         [C:\WINDOWS\system32\MSVCRT.DLL]
                ZNK9QWebFrame26qt_check_for_QOBJECT_macroIS_EEvRKT_ [D:\WORK\WEBVIEWMEMLEAK\DEBUG\QTWEBKITD4.DLL]
    [I] MPK: Potential memory leak of 106 bytes from 1 block allocated in lock [MSVCRT.DLL]
            Offset 0x0000003a referenced by 0x0875cc6c, a location in a section in a loaded module
            Offset 0x00000009 referenced by 0x0e1a57c0, a location in a section in a loaded module
            Offset 0x00000009 referenced by 0x0e1a5888, a location in a section in a loaded module
            Distribution of potentially leaked blocks
                   106 bytes from 1 block of 106 bytes (0x0e1a57c0)
            Allocation location
                malloc         [C:\WINDOWS\system32\MSVCRT.DLL]
                lock           [C:\WINDOWS\system32\MSVCRT.DLL]
    [W] MLK: Memory leak of 32 bytes from 1 block allocated in mmDrvInstall [WINMM.DLL]
            Distribution of leaked blocks
                    32 bytes from 1 block of 32 bytes (0x002563e0)
            Allocation location
                GlobalAlloc    [C:\WINDOWS\system32\KERNEL32.DLL]
                mmDrvInstall   [C:\WINDOWS\SYSTEM32\WINMM.DLL]


А пример пришлось поправить маленько, а то не собирался:

#include <QtGui/QApplication>
#include <QtWebKit/QWebView>
#include <QtGui/QAction>

Автор: kwisp 14.7.2009, 9:09

жесть короче.
какой же вывод можно сделать?
сколько времени придется потратить что поправить код троллей.?

Автор: SABROG 14.7.2009, 9:14

Не думаю, что утечку в 64Кб можно назвать утечкой. Скорее всего дело в кэше.

Кстати у кого-нибудь флэшки проигрываются?

Автор: kwisp 14.7.2009, 17:44

SABROG,
я тебя не пойму.
попробуй если интересно проследить за памятью при работе той же ароры-браузера или браузера из демок.

Автор: SABROG 14.7.2009, 19:57

Проследил за демкой browser, утечка ~115Кб

Раскрывающийся текст

[I] Summary of all memory leaks... {115318 bytes, 1861 blocks}
    [I] MPK: Potential memory leak of 57538 bytes from 325 blocks allocated in ZN12QWebDatabaseD1Ev [QTWEBKITD4.DLL]
            Offset 0x00000008 referenced by 0x0fa1b928, a location in a malloc'd block
            Offset 0x00000049 referenced by 0x0fa1b92c, a location in a malloc'd block
            Offset 0x00000049 referenced by 0x0f9b78e0, a location in a malloc'd block
            Offset 0x0000003c referenced by 0x0f9b78e8, a location in a malloc'd block
            Offset 0x00000040 referenced by 0x0f9b78ec, a location in a malloc'd block
            Offset 0x00000048 referenced by 0x0f9b7908, a location in a malloc'd block
            Offset 0x00000038 referenced by 0x0f9b790c, a location in a malloc'd block
            Offset 0x00000008 referenced by 0x0f9b7b78, a location in a malloc'd block
            Distribution of potentially leaked blocks
                 29928 bytes from 29 blocks of 1032 bytes (first block: 0x0fd8dff0)
                  3848 bytes from 26 blocks of 148 bytes (first block: 0x0fa05ac0)
                  3084 bytes from 3 blocks of 1028 bytes (first block: 0x1601a6b0)
                  1764 bytes from 63 blocks of 28 bytes (first block: 0x0f9ce018)
                  1720 bytes from 5 blocks of 344 bytes (first block: 0x14fb6428)
                  1209 bytes from 1 block of 1209 bytes (0x15f5b640)
                  1176 bytes from 7 blocks of 168 bytes (first block: 0x0fa167d0)
                  1024 bytes from 1 block of 1024 bytes (0x162ff208)
                  1005 bytes from 1 block of 1005 bytes (0x1615f018)
                   902 bytes from 1 block of 902 bytes (0x0fa9b110)
                   881 bytes from 1 block of 881 bytes (0x164225a8)
                   721 bytes from 1 block of 721 bytes (0x0feaef00)
                   713 bytes from 1 block of 713 bytes (0x14dbd018)
                   704 bytes from 8 blocks of 88 bytes (first block: 0x0fd939e8)
                   674 bytes from 1 block of 674 bytes (0x0f9c3ee0)
                   585 bytes from 13 blocks of 45 bytes (first block: 0x0fe025e0)
                   544 bytes from 4 blocks of 136 bytes (first block: 0x0fa1ec08)
                   520 bytes from 1 block of 520 bytes (0x0f9fbe88)
                   430 bytes from 10 blocks of 43 bytes (first block: 0x0fdaa738)
                   392 bytes from 1 block of 392 bytes (0x0fdfcba8)
                   352 bytes from 8 blocks of 44 bytes (first block: 0x0fd8d670)
                   336 bytes from 7 blocks of 48 bytes (first block: 0x0fd90348)
                   324 bytes from 3 blocks of 108 bytes (first block: 0x0fdfcd58)
                   322 bytes from 7 blocks of 46 bytes (first block: 0x0fe02428)
                   303 bytes from 3 blocks of 101 bytes (first block: 0x0f9b78d8)
                   300 bytes from 3 blocks of 100 bytes (first block: 0x0f9b7968)
                   248 bytes from 2 blocks of 124 bytes (first block: 0x0fe52a58)
                   247 bytes from 19 blocks of 13 bytes (first block: 0x0fd32468)
                   232 bytes from 8 blocks of 29 bytes (first block: 0x14d621e0)
                   208 bytes from 4 blocks of 52 bytes (first block: 0x0fd6c4d0)
                   177 bytes from 3 blocks of 59 bytes (first block: 0x0fd52aa0)
                   160 bytes from 2 blocks of 80 bytes (first block: 0x150c0820)
                   159 bytes from 3 blocks of 53 bytes (first block: 0x0fd6be40)
                   150 bytes from 2 blocks of 75 bytes (first block: 0x0fd90418)
                   142 bytes from 2 blocks of 71 bytes (first block: 0x0fea7948)
                   132 bytes from 12 blocks of 11 bytes (first block: 0x0fdb6fc0)
                   130 bytes from 2 blocks of 65 bytes (first block: 0x16080b08)
                   120 bytes from 3 blocks of 40 bytes (first block: 0x150e5bb8)
                   120 bytes from 10 blocks of 12 bytes (first block: 0x0fdada78)
                   114 bytes from 2 blocks of 57 bytes (first block: 0x0fd57c78)
                   112 bytes from 7 blocks of 16 bytes (first block: 0x0fd93aa0)
                   110 bytes from 2 blocks of 55 bytes (first block: 0x1506cc38)
                   109 bytes from 1 block of 109 bytes (0x0fdadb60)
                   102 bytes from 6 blocks of 17 bytes (first block: 0x0fd420b0)
                    94 bytes from 2 blocks of 47 bytes (first block: 0x0fe0c478)
                    87 bytes from 1 block of 87 bytes (0x0fd948f0)
                    86 bytes from 1 block of 86 bytes (0x0fdfb1a0)
                    74 bytes from 1 block of 74 bytes (0x0fd903a0)
                    61 bytes from 1 block of 61 bytes (0x0fa07340)
                    58 bytes from 1 block of 58 bytes (0x1506cc98)
                    54 bytes from 1 block of 54 bytes (0x0fa1d9c8)
                    50 bytes from 1 block of 50 bytes (0x0fd863b8)
                    49 bytes from 1 block of 49 bytes (0x0fd6cb00)
                    45 bytes from 3 blocks of 15 bytes (first block: 0x0fd93a68)
                    39 bytes from 1 block of 39 bytes (0x15fca528)
                    37 bytes from 1 block of 37 bytes (0x16309288)
                    36 bytes from 1 block of 36 bytes (0x163f2f20)
                    34 bytes from 1 block of 34 bytes (0x14eb6a08)
                    33 bytes from 1 block of 33 bytes (0x0fe48dd8)
                    32 bytes from 1 block of 32 bytes (0x0fd65ac8)
                    28 bytes from 2 blocks of 14 bytes (first block: 0x0fdadbf8)
                    27 bytes from 1 block of 27 bytes (0x0fd837c8)
                    25 bytes from 1 block of 25 bytes (0x0fd84fb8)
                    24 bytes from 1 block of 24 bytes (0x0fd7fca0)
                    22 bytes from 1 block of 22 bytes (0x0fd89db0)
                    10 bytes from 1 block of 10 bytes (0x16076880)
            Allocation location
                malloc         [C:\WINDOWS\system32\MSVCRT.DLL]
                ZN12QWebDatabaseD1Ev [D:\WORK\QT-ALL-OPENSOURCE-SRC-4.5.2_GCC440\DEMOS\BROWSER\DEBUG\QTWEBKITD4.DLL]
    [W] MLK: Memory leak of 19008 bytes from 297 blocks allocated in D:\WORK\QT-ALL-OPENSOURCE-SRC-4.5.2_GCC440\DEMOS\BROWSER\DEBUG\QTWEBKITD4.DLL
            Distribution of leaked blocks
                 19008 bytes from 297 blocks of 64 bytes (first block: 0x0f9f8d10)
            Allocation location
                malloc         [C:\WINDOWS\system32\MSVCRT.DLL]
                ???            [D:\WORK\QT-ALL-OPENSOURCE-SRC-4.5.2_GCC440\DEMOS\BROWSER\DEBUG\QTWEBKITD4.DLL ip=0x088F69A3]
    [I] MPK: Potential memory leak of 14372 bytes from 808 blocks allocated in Z7qMallocj [QTCORED4.DLL]
            Offset 0x00000008 referenced by 0x0fa411d0, a location in a malloc'd block
            Offset 0x00000008 referenced by 0x0fa4c144, a location in a malloc'd block
            Distribution of potentially leaked blocks
                 12272 bytes from 767 blocks of 16 bytes (first block: 0x0ef04b68)
                   960 bytes from 16 blocks of 60 bytes (first block: 0x0fd4a628)
                   780 bytes from 15 blocks of 52 bytes (first block: 0x0fa09bd8)
                   128 bytes from 2 blocks of 64 bytes (first block: 0x15065038)
                   120 bytes from 6 blocks of 20 bytes (first block: 0x0fd80090)
                   112 bytes from 2 blocks of 56 bytes (first block: 0x0fda8038)
            Allocation location
                malloc         [C:\WINDOWS\system32\MSVCRT.DLL]
                Z7qMallocj     [D:\WORK\QT-ALL-OPENSOURCE-SRC-4.5.2_GCC440\DEMOS\BROWSER\DEBUG\QTCORED4.DLL]
    [I] MPK: Potential memory leak of 6732 bytes from 17 blocks allocated in C:\WINDOWS\SYSTEM32\MSACM32.DLL
            Offset 0x00000020 referenced by 0x76f321e3, a location in a section in a loaded module
            Offset 0x00000120 referenced by 0x76f321e7, a location in a section in a loaded module
            Offset 0x00000018 referenced by 0x002bf1d8, a location in a section in a loaded module
            Distribution of potentially leaked blocks
                  6732 bytes from 17 blocks of 396 bytes (first block: 0x002bad60)
            Allocation location
                LocalAlloc     [C:\WINDOWS\system32\KERNEL32.DLL]
                ???            [C:\WINDOWS\SYSTEM32\MSACM32.DLL ip=0x57BD3030]
    [I] MPK: Potential memory leak of 4056 bytes from 6 blocks allocated in GetTextCharset [GDI32.DLL]
            Offset 0x000001de referenced by 0x76f3246f, a location in a section in a loaded module
            Offset 0x0000026d referenced by 0x775f889d, a location in a section in a loaded module
            Offset 0x0000026c referenced by 0x775f8ba5, a location in a section in a loaded module
            Offset 0x0000026c referenced by 0x775f8ba9, a location in a section in a loaded module
            Offset 0x00000269 referenced by 0x775f8ea5, a location in a section in a loaded module
            Offset 0x00000269 referenced by 0x775f8ea9, a location in a section in a loaded module
            Offset 0x00000268 referenced by 0x775f8fa5, a location in a section in a loaded module
            Offset 0x00000268 referenced by 0x775f8fa9, a location in a section in a loaded module
            Offset 0x00000287 referenced by 0x775f90a9, a location in a section in a loaded module
            Offset 0x00000286 referenced by 0x775f91a5, a location in a section in a loaded module
            Distribution of potentially leaked blocks
                  4056 bytes from 6 blocks of 676 bytes (first block: 0x0025b198)
            Allocation location
                RtlAllocateHeap [C:\WINDOWS\system32\NTDLL.DLL]
                GetTextCharset [C:\WINDOWS\system32\GDI32.DLL]
                GetViewportExtEx [C:\WINDOWS\system32\GDI32.DLL]
    [W] MLK: Memory leak of 4044 bytes from 337 blocks allocated in ZNK9QWebFrame26qt_check_for_QOBJECT_macroIS_EEvRKT_ [QTWEBKITD4.DLL]
            Distribution of leaked blocks
                  4044 bytes from 337 blocks of 12 bytes (first block: 0x0f9b70f0)
            Allocation location
                malloc         [C:\WINDOWS\system32\MSVCRT.DLL]
                ZNK9QWebFrame26qt_check_for_QOBJECT_macroIS_EEvRKT_ [D:\WORK\QT-ALL-OPENSOURCE-SRC-4.5.2_GCC440\DEMOS\BROWSER\DEBUG\QTWEBKITD4.DLL]
    [I] MPK: Potential memory leak of 2048 bytes from 1 block allocated in ZN12QWebDatabaseD1Ev [QTWEBKITD4.DLL]
            Offset 0x000003f7 referenced by 0x09525da8, a location in a section in a loaded module
            Offset 0x00000658 referenced by 0x0fff03b8, a location in a section in a loaded module
            Offset 0x000007b0 referenced by 0x0fff9498, a location in a section in a loaded module
            Offset 0x000003a0 referenced by 0x15711e88, a location in a section in a loaded module
            Offset 0x000003f8 referenced by 0x15711ea8, a location in a section in a loaded module
            Offset 0x000004b8 referenced by 0x15711ee8, a location in a section in a loaded module
            Offset 0x00000510 referenced by 0x15711f68, a location in a section in a loaded module
            Offset 0x00000080 referenced by 0x15c49858, a location in a section in a loaded module
            Offset 0x00000568 referenced by 0x15c4ea98, a location in a section in a loaded module
            Offset 0x000002e8 referenced by 0x15c4eaf8, a location in a section in a loaded module
            Distribution of potentially leaked blocks
                  2048 bytes from 1 block of 2048 bytes (0x161b9ba0)
            Allocation location
                realloc        [C:\WINDOWS\system32\MSVCRT.DLL]
                ZN12QWebDatabaseD1Ev [D:\WORK\QT-ALL-OPENSOURCE-SRC-4.5.2_GCC440\DEMOS\BROWSER\DEBUG\QTWEBKITD4.DLL]
    [I] MPK: Potential memory leak of 1920 bytes from 30 blocks allocated in D:\WORK\QT-ALL-OPENSOURCE-SRC-4.5.2_GCC440\DEMOS\BROWSER\DEBUG\QTWEBKITD4.DLL
            Offset 0x00000014 referenced by 0x094aeb61, a location in a section in a loaded module
            Distribution of potentially leaked blocks
                  1920 bytes from 30 blocks of 64 bytes (first block: 0x0fe8e0e8)
            Allocation location
                malloc         [C:\WINDOWS\system32\MSVCRT.DLL]
                ???            [D:\WORK\QT-ALL-OPENSOURCE-SRC-4.5.2_GCC440\DEMOS\BROWSER\DEBUG\QTWEBKITD4.DLL ip=0x088F69A3]
    [I] MPK: Potential memory leak of 1352 bytes from 2 blocks allocated in GetTextCharset [GDI32.DLL]
            Offset 0x00000138 referenced by 0x15f6ceff, a location in a malloc'd block
            Distribution of potentially leaked blocks
                  1352 bytes from 2 blocks of 676 bytes (first block: 0x002684c8)
            Allocation location
                RtlAllocateHeap [C:\WINDOWS\system32\NTDLL.DLL]
                GetTextCharset [C:\WINDOWS\system32\GDI32.DLL]
                GetTextExtentPointA [C:\WINDOWS\system32\GDI32.DLL]
                IsWindowUnicode [C:\WINDOWS\system32\USER32.DLL]
    [I] MPK: Potential memory leak of 1320 bytes from 5 blocks allocated in I_RpcBCacheFree [RPCRT4.DLL]
            Offset 0x000000b6 referenced by 0x75dc5245, a location in a section in a loaded module
            Offset 0x00000008 referenced by 0x002823a8, a location in a section in a loaded module
            Distribution of potentially leaked blocks
                  1320 bytes from 5 blocks of 264 bytes (first block: 0x00266d70)
            Allocation location
                HeapAlloc      [C:\WINDOWS\system32\KERNEL32.DLL]
                I_RpcBCacheFree [C:\WINDOWS\system32\RPCRT4.DLL]
    [I] MPK: Potential memory leak of 676 bytes from 1 block allocated in GetTextCharset [GDI32.DLL]
            Offset 0x00000067 referenced by 0x019b8624, a location in a section in a loaded module
            Offset 0x000001d4 referenced by 0x01bed963, a location in a section in a loaded module
            Offset 0x0000007c referenced by 0x09295637, a location in a section in a loaded module
            Offset 0x0000017c referenced by 0x0929563f, a location in a section in a loaded module
            Offset 0x0000027c referenced by 0x09295647, a location in a section in a loaded module
            Offset 0x000000c9 referenced by 0x0932f207, a location in a section in a loaded module
            Offset 0x000000c9 referenced by 0x093a8c2a, a location in a section in a loaded module
            Offset 0x000001d4 referenced by 0x099fb447, a location in a section in a loaded module
            Offset 0x000001d4 referenced by 0x6a373643, a location in a section in a loaded module
            Distribution of potentially leaked blocks
                   676 bytes from 1 block of 676 bytes (0x002c3998)
            Allocation location
                RtlAllocateHeap [C:\WINDOWS\system32\NTDLL.DLL]
                GetTextCharset [C:\WINDOWS\system32\GDI32.DLL]
                GetMenuCheckMarkDimensions [C:\WINDOWS\system32\USER32.DLL]
                GetMenuCheckMarkDimensions [C:\WINDOWS\system32\USER32.DLL]
                GetWindowLongW [C:\WINDOWS\system32\USER32.DLL]
    [I] MPK: Potential memory leak of 676 bytes from 1 block allocated in GetTextCharset [GDI32.DLL]
            Offset 0x00000132 referenced by 0x094a0474, a location in a section in a loaded module
            Offset 0x00000016 referenced by 0x002ed8c4, a location in a section in a loaded module
            Offset 0x0000009a referenced by 0x002edae4, a location in a section in a loaded module
            Offset 0x0000000e referenced by 0x165923fa, a location in a section in a loaded module
            Offset 0x0000000e referenced by 0x165c1e4e, a location in a section in a loaded module
            Distribution of potentially leaked blocks
                   676 bytes from 1 block of 676 bytes (0x002ec018)
            Allocation location
                RtlAllocateHeap [C:\WINDOWS\system32\NTDLL.DLL]
                GetTextCharset [C:\WINDOWS\system32\GDI32.DLL]
                GetMenuCheckMarkDimensions [C:\WINDOWS\system32\USER32.DLL]
                GetWindowLongW [C:\WINDOWS\system32\USER32.DLL]
    [W] MLK: Memory leak of 312 bytes from 3 blocks allocated in WmiOpenBlock [ADVAPI32.DLL]
            Distribution of leaked blocks
                   312 bytes from 3 blocks of 104 bytes (first block: 0x15842e90)
            Allocation location
                RtlAllocateHeap [C:\WINDOWS\system32\NTDLL.DLL]
                WmiOpenBlock   [C:\WINDOWS\system32\ADVAPI32.DLL]
    [I] MPK: Potential memory leak of 228 bytes from 8 blocks allocated in Z7qMallocj [QTCORED4.DLL]
            Offset 0x00000014 referenced by 0x14fe5ae4, a location in a malloc'd block
            Offset 0x00000014 referenced by 0x15f90e68, a location in a malloc'd block
            Distribution of potentially leaked blocks
                   196 bytes from 7 blocks of 28 bytes (first block: 0x0fe8ea60)
                    32 bytes from 1 block of 32 bytes (0x1630dac0)
            Allocation location
                malloc         [C:\WINDOWS\system32\MSVCRT.DLL]
                Z7qMallocj     [D:\WORK\QT-ALL-OPENSOURCE-SRC-4.5.2_GCC440\DEMOS\BROWSER\DEBUG\QTCORED4.DLL]
                EnumDisplayDevicesA [C:\WINDOWS\system32\USER32.DLL]
                EnumDisplayDevicesA [C:\WINDOWS\system32\USER32.DLL]
                EnumDisplayDevicesA [C:\WINDOWS\system32\USER32.DLL]
                GetWindowLongW [C:\WINDOWS\system32\USER32.DLL]
    [W] MLK: Memory leak of 176 bytes from 1 block allocated in mmDrvInstall [WINMM.DLL]
            Distribution of leaked blocks
                   176 bytes from 1 block of 176 bytes (0x002aac38)
            Allocation location
                GlobalAlloc    [C:\WINDOWS\system32\KERNEL32.DLL]
                mmDrvInstall   [C:\WINDOWS\SYSTEM32\WINMM.DLL]
    [W] MLK: Memory leak of 144 bytes from 3 blocks allocated in StartWsdpService [MSWSOCK.DLL]
            Distribution of leaked blocks
                   144 bytes from 3 blocks of 48 bytes (first block: 0x0ff803b8)
            Allocation location
                RtlAllocateHeap [C:\WINDOWS\system32\NTDLL.DLL]
                StartWsdpService [C:\WINDOWS\SYSTEM32\MSWSOCK.DLL]
                GetWindowLongW [C:\WINDOWS\system32\USER32.DLL]
    [I] MPK: Potential memory leak of 136 bytes from 1 block allocated in lock [MSVCRT.DLL]
            Offset 0x00000009 referenced by 0x0ef05948, a location in a malloc'd block
            Offset 0x00000009 referenced by 0x0ef05868, a location in a malloc'd block
            Distribution of potentially leaked blocks
                   136 bytes from 1 block of 136 bytes (0x0ef05868)
            Allocation location
                malloc         [C:\WINDOWS\system32\MSVCRT.DLL]
                lock           [C:\WINDOWS\system32\MSVCRT.DLL]
    [I] MPK: Potential memory leak of 104 bytes from 1 block allocated in WmiOpenBlock [ADVAPI32.DLL]
            Offset 0x00000051 referenced by 0x61593e91, a location in a section in a loaded module
            Distribution of potentially leaked blocks
                   104 bytes from 1 block of 104 bytes (0x15845708)
            Allocation location
                RtlAllocateHeap [C:\WINDOWS\system32\NTDLL.DLL]
                WmiOpenBlock   [C:\WINDOWS\system32\ADVAPI32.DLL]
    [W] MLK: Memory leak of 88 bytes from 4 blocks allocated in waveOutMessage [WINMM.DLL]
            Distribution of leaked blocks
                    88 bytes from 4 blocks of 22 bytes (first block: 0x0029dd60)
            Allocation location
                HeapAlloc      [C:\WINDOWS\system32\KERNEL32.DLL]
                waveOutMessage [C:\WINDOWS\SYSTEM32\WINMM.DLL]
    [I] MPK: Potential memory leak of 80 bytes from 1 block allocated in GetBitmapBits [GDI32.DLL]
            Offset 0x0000004f referenced by 0x0f218ae7, a location in a memory-mapped range
            Offset 0x0000004f referenced by 0x0f218bb7, a location in a memory-mapped range
            Offset 0x0000004f referenced by 0x0f218c8f, a location in a memory-mapped range
            Offset 0x0000004f referenced by 0x0f223d87, a location in a memory-mapped range
            Offset 0x0000004f referenced by 0x0f225ac7, a location in a memory-mapped range
            Offset 0x0000004f referenced by 0x0f225baf, a location in a memory-mapped range
            Offset 0x0000004f referenced by 0x0f225c97, a location in a memory-mapped range
            Offset 0x0000004f referenced by 0x0f225d7f, a location in a memory-mapped range
            Distribution of potentially leaked blocks
                    80 bytes from 1 block of 80 bytes (0x002691b0)
            Allocation location
                RtlAllocateHeap [C:\WINDOWS\system32\NTDLL.DLL]
                GetBitmapBits  [C:\WINDOWS\system32\GDI32.DLL]
                CreateFontIndirectExW [C:\WINDOWS\system32\GDI32.DLL]
    [W] MLK: Memory leak of 80 bytes from 1 block allocated in GetBitmapBits [GDI32.DLL]
            Distribution of leaked blocks
                    80 bytes from 1 block of 80 bytes (0x002785d8)
            Allocation location
                RtlAllocateHeap [C:\WINDOWS\system32\NTDLL.DLL]
                GetBitmapBits  [C:\WINDOWS\system32\GDI32.DLL]
                GetROP2        [C:\WINDOWS\system32\GDI32.DLL]
                IsWindowUnicode [C:\WINDOWS\system32\USER32.DLL]
    [W] MLK: Memory leak of 48 bytes from 1 block allocated in StartWsdpService [MSWSOCK.DLL]
            Distribution of leaked blocks
                    48 bytes from 1 block of 48 bytes (0x0ff804c0)
            Allocation location
                RtlAllocateHeap [C:\WINDOWS\system32\NTDLL.DLL]
                StartWsdpService [C:\WINDOWS\SYSTEM32\MSWSOCK.DLL]
                GetMenuCheckMarkDimensions [C:\WINDOWS\system32\USER32.DLL]
                GetWindowLongW [C:\WINDOWS\system32\USER32.DLL]
    [W] MLK: Memory leak of 48 bytes from 1 block allocated in StartWsdpService [MSWSOCK.DLL]
            Distribution of leaked blocks
                    48 bytes from 1 block of 48 bytes (0x0ff80410)
            Allocation location
                RtlAllocateHeap [C:\WINDOWS\system32\NTDLL.DLL]
                StartWsdpService [C:\WINDOWS\SYSTEM32\MSWSOCK.DLL]
                GetMenuCheckMarkDimensions [C:\WINDOWS\system32\USER32.DLL]
                GetMenuCheckMarkDimensions [C:\WINDOWS\system32\USER32.DLL]
                GetMenuCheckMarkDimensions [C:\WINDOWS\system32\USER32.DLL]
                GetWindowLongW [C:\WINDOWS\system32\USER32.DLL]
    [W] MLK: Memory leak of 48 bytes from 1 block allocated in StartWsdpService [MSWSOCK.DLL]
            Distribution of leaked blocks
                    48 bytes from 1 block of 48 bytes (0x0ff80360)
            Allocation location
                RtlAllocateHeap [C:\WINDOWS\system32\NTDLL.DLL]
                StartWsdpService [C:\WINDOWS\SYSTEM32\MSWSOCK.DLL]
                GetMenuCheckMarkDimensions [C:\WINDOWS\system32\USER32.DLL]
                GetMenuCheckMarkDimensions [C:\WINDOWS\system32\USER32.DLL]
                GetWindowLongW [C:\WINDOWS\system32\USER32.DLL]
    [I] MPK: Potential memory leak of 48 bytes from 4 blocks allocated in ZNK9QWebFrame26qt_check_for_QOBJECT_macroIS_EEvRKT_ [QTWEBKITD4.DLL]
            Offset 0x00000008 referenced by 0x094e0e96, a location in a section in a loaded module
            Distribution of potentially leaked blocks
                    48 bytes from 4 blocks of 12 bytes (first block: 0x0fa3fb78)
            Allocation location
                malloc         [C:\WINDOWS\system32\MSVCRT.DLL]
                ZNK9QWebFrame26qt_check_for_QOBJECT_macroIS_EEvRKT_ [D:\WORK\QT-ALL-OPENSOURCE-SRC-4.5.2_GCC440\DEMOS\BROWSER\DEBUG\QTWEBKITD4.DLL]
    [I] MPK: Potential memory leak of 36 bytes from 1 block allocated in QuerySecurityPackageInfoW [SECUR32.DLL]
            Offset 0x0000000a referenced by 0x0f246658, a location in a memory-mapped range
            Distribution of potentially leaked blocks
                    36 bytes from 1 block of 36 bytes (0x002b0678)
            Allocation location
                LocalAlloc     [C:\WINDOWS\system32\KERNEL32.DLL]
                QuerySecurityPackageInfoW [C:\WINDOWS\system32\SECUR32.DLL]



Я не говорю, что памяти не жрет, но утечки практически нет. Кстати release версия браузера жрет меньше памяти. И почему-то в браузере у меня работает YouTube, флешки, музыка. А в простейшем приложении с QWebView не работает.

Автор: IMPOMEZIA 15.7.2009, 5:27

Цитата(kwisp)
баг этот висит еще с 2008 года тролли не хотят его отрабатывать.

Правильнее говорить об этом http://www.qtsoftware.com/developer/task-tracker/index_html?method=entry&id=248414, но описание не радует даже не смотря на приоритет.
Также был аналогичный баг у Arora http://code.google.com/p/arora/issues/detail?id=153 который был отправлен на bugs.webkit.org https://bugs.webkit.org/show_bug.cgi?id=24458 где был благополучно послан, т.е. "исправлен".

Цитата(kwisp)
Проследил за демкой browser, утечка ~115Кб

+
Цитата(SABROG)
однако если взять браузер из %QTDIR%\domos\browser тоже память жрёт... с 42Мб с легкостью догна до 200Мб и походу предела нет.

Утечка не утечка, но память он ест мегабайтами, притом Qt 4.5 в этом плане стал ещё хуже.

P.S. А вообще QtWebKit производит крайне удручающее впечатление, на поверхности всё вроде красиво и работает, т.е. на самом деле QtWebKit работает только формально, и похоже это всех устаивает.

Автор: kwisp 15.7.2009, 10:09

SABROG,

Цитата(SABROG @ 14.7.2009, 20:57) *
Проследил за демкой browser, утечка ~115Кб

не знаю чем следил, однако.
запусти декмку браузера в виндамасдае и посомтри что происходит при каждой перезагрузки страницы не профайлером а обычным диспетчером. перезагрузи какуюнить страничку помассивнее раз 20-30.
запусти под линуксом что демку что арору и посомтри там сколько прога памяти жрет top`ом. после 20-30 перезагрузок одной и тойже страницы.

я написал приложение с WebKit память кончается после 3-4 часов интенсивной работы.

а вот chromium-browser не выжирает память, тото гугловцы его и допилили этот самый WebKit.

Автор: kwisp 16.7.2009, 10:00

вот вопрос к теме про память valgrind указывает на утечки в QNetworkAccessManager::createRequest
который возвращает указатель на QNetworkReplay
вот код QNetworkAccessManager::createRequest

Раскрывающийся текст
QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Operation op,
                                                    const QNetworkRequest &req,
                                                    QIODevice *outgoingData)
{
    Q_D(QNetworkAccessManager);
    QNetworkRequest request = req;
    if (!request.header(QNetworkRequest::ContentLengthHeader).isValid() &&
        outgoingData && !outgoingData->isSequential()) {
        // request has no Content-Length
        // but the data that is outgoing is random-access
        request.setHeader(QNetworkRequest::ContentLengthHeader, outgoingData->size());
    }
    if (d->cookieJar) {
        QList<QNetworkCookie> cookies = d->cookieJar->cookiesForUrl(request.url());
        if (!cookies.isEmpty())
            request.setHeader(QNetworkRequest::CookieHeader, qVariantFromValue(cookies));
    }

    // first step: create the reply
    QUrl url = request.url();
    QNetworkReplyImpl *reply = new QNetworkReplyImpl(this);
    QNetworkReplyImplPrivate *priv = reply->d_func();
    priv->manager = this;

    // second step: fetch cached credentials
    QNetworkAuthenticationCredential *cred = d->fetchCachedCredentials(url);
    if (cred) {
        url.setUserName(cred->user);
        url.setPassword(cred->password);
        priv->urlForLastAuthentication = url;
    }

    // third step: setup the reply
    priv->setup(op, request, outgoingData);
    if (request.attribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferNetwork).toInt() !=
        QNetworkRequest::AlwaysNetwork)
        priv->setNetworkCache(d->networkCache);
#ifndef QT_NO_NETWORKPROXY
    QList<QNetworkProxy> proxyList = d->queryProxy(QNetworkProxyQuery(request.url()));
    priv->proxyList = proxyList;
#endif

    // fourth step: find a backend
    priv->backend = d->findBackend(op, request);
    if (priv->backend) {
        priv->backend->setParent(reply);
        priv->backend->reply = priv;
    }

#ifndef QT_NO_OPENSSL
    reply->setSslConfiguration(request.sslConfiguration());
#endif
    return reply;
}


как видно создается QNetworkReplyImpl *reply и хозяин у него this т.к. QNetworkReplyImpl наследник QObject то за его удаление отвечает хозяин. хозяин умрет в конце работы программы как я понимаю.

получается при каждом вызове createRequest мы теряем немного памяти...
так?

Автор: kwisp 20.7.2009, 11:20

ОТВЕТ троллей:

The growing memory usage is due to aggressive image and font caching. We retuned the caching for Qt 4.5.2, so it should be fixed in this version.


проверил 4.5.2 действительно жрет меньше однако проблема остается.

Автор: IMPOMEZIA 6.10.2009, 1:32

http://qt.nokia.com/developer/task-tracker/index_html?method=entry&id=248414 Resolution Rejected
Это что означает даже признавать то что память куда-то сжирается не собираются, не то что исправлять? :blink:

Автор: Litkevich Yuriy 6.10.2009, 4:46

плохо, что они не коментаруют в трекере. Может троли это на работу кэша списали?

Автор: kwisp 6.10.2009, 8:39

не хочу грешить на разработчиков но может тут и вопрос политики.
хорошо бы на платной версии библиотеки проверить. может специально сделано. Это собственно первая версия.

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

мне пока не критично так что эту беду я пока отложил.

Автор: kwisp 12.10.2009, 8:55

что то поправили. надо проверять:)
http://labs.trolltech.com/blogs/2009/10/11/qtwebkit-on-the-road-towards-qt-46/

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)