Добрый день, коллеги.
Задался вопросом : отловлены все mem-лики, все отлично, все работает, но наблюдается некоторая деградация производительности (при n запусках некоторого действия). Было сделано предположение, что виной всему фрагментация С++ кучи. Есть ли средства проверки фрагментации кучи? Может быть есть какие-нибудь api-функции позволяющие выяснить это дело (какие-нить GetFreeHeapBlocks, GetNonFreeHeapBlocks and etc.)?
ОС — Винда.
Заранее благодарен за любую помощь в этом деле.
12.07.10 13:09: Перенесено модератором из 'C/C++' — Кодт
Здравствуйте, Klikujiskaaan, Вы писали:
K>Добрый день, коллеги. K>Задался вопросом : отловлены все mem-лики, все отлично, все работает, но наблюдается некоторая деградация производительности (при n запусках некоторого действия). Было сделано предположение, что виной всему фрагментация С++ кучи. Есть ли средства проверки фрагментации кучи? Может быть есть какие-нибудь api-функции позволяющие выяснить это дело (какие-нить GetFreeHeapBlocks, GetNonFreeHeapBlocks and etc.)? K>ОС — Винда. K>Заранее благодарен за любую помощь в этом деле.
Какая винда? Если это виста и выше, то по-умолчанию включена LFH куча, которая не страдает фрагментацией. Да и для обычной кучи они вроде делали небольшой slab кэш.
Здравствуйте, remark, Вы писали:
R>Здравствуйте, Klikujiskaaan, Вы писали:
K>>Добрый день, коллеги. K>>Задался вопросом : отловлены все mem-лики, все отлично, все работает, но наблюдается некоторая деградация производительности (при n запусках некоторого действия). Было сделано предположение, что виной всему фрагментация С++ кучи. Есть ли средства проверки фрагментации кучи? Может быть есть какие-нибудь api-функции позволяющие выяснить это дело (какие-нить GetFreeHeapBlocks, GetNonFreeHeapBlocks and etc.)? K>>ОС — Винда. K>>Заранее благодарен за любую помощь в этом деле.
R>Какая винда? Если это виста и выше, то по-умолчанию включена LFH куча, которая не страдает фрагментацией. Да и для обычной кучи они вроде делали небольшой slab кэш.
R>
Здравствуйте, Klikujiskaaan, Вы писали:
R>>Какая винда? Если это виста и выше, то по-умолчанию включена LFH куча, которая не страдает фрагментацией. Да и для обычной кучи они вроде делали небольшой slab кэш.
K>Как раз Виста и выше. (Сам сижу под х64 семеркой)
Тогда это не из-за фрагментации. LFH куча всегда O(1).
Здравствуйте, Klikujiskaaan, Вы писали:
K>Добрый день, коллеги. K>Задался вопросом : отловлены все mem-лики, все отлично, все работает, но наблюдается некоторая деградация производительности (при n запусках некоторого действия).
Это "некоторое действие" явно или неявно к диску обращается? Если да, то исследовать возможность кэш промахов на уровне дискового кэша.
Здравствуйте, Kh_Oleg, Вы писали:
K_O>Здравствуйте, Klikujiskaaan, Вы писали:
K>>Добрый день, коллеги. K>>Задался вопросом : отловлены все mem-лики, все отлично, все работает, но наблюдается некоторая деградация производительности (при n запусках некоторого действия). K_O>Это "некоторое действие" явно или неявно к диску обращается? Если да, то исследовать возможность кэш промахов на уровне дискового кэша.
Да, подгружается довольно объемная структура. Благодарю, завтра испробуем ваше предположение.
Здравствуйте, remark, Вы писали:
R>Здравствуйте, Klikujiskaaan, Вы писали:
R>>>Какая винда? Если это виста и выше, то по-умолчанию включена LFH куча, которая не страдает фрагментацией. Да и для обычной кучи они вроде делали небольшой slab кэш.
K>>Как раз Виста и выше. (Сам сижу под х64 семеркой)
R>Тогда это не из-за фрагментации. LFH куча всегда O(1).
R>
Последние вести с полей — при потери производительности еще и растет потребляемая память. Списал бы на лики, но от них все было буквально вылизано. Что опять приводит меня в раздумья: то ли лыжи не едут, то ли фрагментация имеет место быть.
Здравствуйте, Klikujiskaaan, Вы писали:
K>Последние вести с полей — при потери производительности еще и растет потребляемая память. Списал бы на лики, но от них все было буквально вылизано.
Может быть просто несвоевременное освобождение памяти?
Кстати, как растет память? В смысле — до чего? В физическую память помещается?
Здравствуйте, VladFein, Вы писали:
VF>Здравствуйте, Klikujiskaaan, Вы писали:
K>>Последние вести с полей — при потери производительности еще и растет потребляемая память. Списал бы на лики, но от них все было буквально вылизано. VF>Может быть просто несвоевременное освобождение памяти? VF>Кстати, как растет память? В смысле — до чего? В физическую память помещается?
Память растет медленно — но верно =) После 1000 запусков одного и того же действия (создание нового док-та — выход без сохранения) пилообразный график расхода памяти с тендером роста вверх, пик тотати релейтетд =)
Мне, поидее, тоже в текущей задаче это нужно. Даже лики памяти тяжело отловить (программа месяцами работает без обслуживания), иногда глючит, почему — хз, данных набирает много, но полный лог будет сравним с количеством данных, а это критично. Если очень интересно — сбор данных с АЦП, станции стоят в деревнях, у бабушек, от которых максимум можно потребовать, чтобы ничего не трогали.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, Klikujiskaaan, Вы писали:
K>Задался вопросом : отловлены все mem-лики, все отлично, все работает, но наблюдается некоторая деградация производительности (при n запусках некоторого действия).
Вы можете терять не память, а какие-нибудь другие ресурсы. Хэндлы, окна и т. д...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Вы можете терять не память, а какие-нибудь другие ресурсы. Хэндлы, окна и т. д...
Какие хэндлы! На графике же ясно написано — "Мегабуйты"
//is not working in debug mode and under debugger
ULONG HeapType = 2;
HeapSetInformation((HANDLE)_get_heap_handle(), HeapCompatibilityInformation,&HeapType, sizeof(HeapType));
проверять нужно в релизе и не под отладчиком
Если после этого все еще подтекает — лик у вас
Здравствуйте, VladFein, Вы писали:
VF>Какие хэндлы! На графике же ясно написано — "Мегабуйты"
Ну битмапки, например...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
R> //is not working in debug mode and under debugger
R> ULONG HeapType = 2;
R> HeapSetInformation((HANDLE)_get_heap_handle(), HeapCompatibilityInformation,&HeapType, sizeof(HeapType));
R>
Сработает только если винда до висты.
С висты начиная хип сразу в LFH режиме работает.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока