Планирую тут простенькую плагинную системку. Несколько потоков (плагинов) ставят в очередь сообщения, один поток - очередь обрабатывает. Где-то с частотой 25 - 20 минут "утекает" по 2 байта. Все перебрал, сил нет. Планировал решить проблему - "топором". Как только процесс занял памяти больше чем N, - перезагрузить все плагины. Для этого нужно отслеживать объем памяти занятой процессом. Выбрал GetProcessMemoryInfo(). Теперь, собственно, вопрос. Это нормально что GetProcessMemoryInfo() в цикле кушает так много процессорного ресурса? Такой цикл просто нереально грузит проц. Код (Text): start: invoke GetCurrentProcess mov hProcess, eax .while 1 invoke GetProcessMemoryInfo, hProcess, ADDR pmc, SIZEOF pmc mov eax, pmc.WorkingSetSize invoke wsprintf,addr TextBuf,addr template,eax invoke StdOut,addr TextBuf .endw end start Как лучше применить GetProcessMemoryInfo(), отдельным потоком что-ли? Посоветуйте как Вы ее (GetProcessMemoryInfo()) используете?
решается это профайлером обычно либо своим менеджером памяти, хз что вы там перебирали, конкретного ничего в топе не указано ересь какая то не ясно чего конкретно вы ожидали
fsd Добрый человек, посоветуйте профайлер для "невежественного рыбака" Пишу на masm - е. Не проходите мимо ))) Как выглядит "свой" менеджер - в двух словах можно? если не в лом?
_sheva740 ну, для масма, я думаю, может вполне подойти баундсчекер - отладочная инфа же есть.... Или БЧ работает только с С С++? Просто, никогда не юзал Х(
любой который unmanaged код поддерживает и не встраивается в студию, Deleaker например и тп создаете некий список структур, описывающих выделяемую память, при выделении памяти добавляете туда данные о выделенном размере, адресе и колстек
fsd Не понятно. Сознательно комментирую строки освобождения памяти в программе. Запускаю из под Deleaker for Visual C++ Setup Version: 2.2.7, (который Standalone кстати) только что скачанный на 14 дней триал. Указываю - "мониторить память". Наблюдаю явную утечку памяти . Останавливаю, в результате - "Searching for allocated memory blocks: leaks not detected". Судя по всему писать что-то в несколько потоков с динамич. выделением памяти - только на С возможно? Не подскажете что-то "отдельно стоящего" кроме Deleaker-а ? А то теряю веру ))