GetProcessMemoryInfo сильно кушает процессорный ресурс. Это нормально?

Тема в разделе "WASM.BEGINNERS", создана пользователем _sheva740, 1 апр 2011.

  1. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Планирую тут простенькую плагинную системку.
    Несколько потоков (плагинов) ставят в очередь сообщения,
    один поток - очередь обрабатывает.

    Где-то с частотой 25 - 20 минут "утекает" по 2 байта.
    Все перебрал, сил нет.

    Планировал решить проблему - "топором".
    Как только процесс занял памяти
    больше чем N, - перезагрузить все плагины.

    Для этого нужно отслеживать объем памяти занятой процессом.
    Выбрал GetProcessMemoryInfo().
    Теперь, собственно, вопрос.

    Это нормально что GetProcessMemoryInfo() в цикле кушает
    так много процессорного ресурса?
    Такой цикл просто нереально грузит проц.

    Код (Text):
    1. start:
    2.     invoke  GetCurrentProcess
    3.     mov hProcess, eax
    4. .while  1
    5.     invoke  GetProcessMemoryInfo, hProcess, ADDR pmc, SIZEOF pmc
    6.     mov eax, pmc.WorkingSetSize
    7.     invoke  wsprintf,addr TextBuf,addr template,eax
    8.     invoke  StdOut,addr TextBuf
    9. .endw
    10. end start
    [​IMG]

    Как лучше применить GetProcessMemoryInfo(), отдельным потоком что-ли?
    Посоветуйте как Вы ее (GetProcessMemoryInfo()) используете?
     
  2. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    решается это профайлером обычно либо своим менеджером памяти,
    хз что вы там перебирали, конкретного ничего в топе не указано
    ересь какая то
    не ясно чего конкретно вы ожидали
     
  3. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    fsd
    Добрый человек, посоветуйте профайлер для "невежественного рыбака"
    Пишу на masm - е.
    Не проходите мимо )))
    Как выглядит "свой" менеджер - в двух словах можно? если не в лом?
     
  4. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    _sheva740
    ну, для масма, я думаю, может вполне подойти баундсчекер - отладочная инфа же есть.... Или БЧ работает только с С С++? Просто, никогда не юзал Х(
     
  5. Swat2k

    Swat2k Дима

    Публикаций:
    0
    Регистрация:
    14 май 2007
    Сообщения:
    64
    хоть бы Sleep(700) в цикле поставили....
     
  6. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Да, она в VS встраивается.
    Для masm похоже нечем (((
     
  7. fsd

    fsd New Member

    Публикаций:
    0
    Регистрация:
    4 июл 2010
    Сообщения:
    353
    любой который unmanaged код поддерживает и не встраивается в студию, Deleaker например и тп
    создаете некий список структур, описывающих выделяемую память, при выделении памяти добавляете туда данные о выделенном размере, адресе и колстек
     
  8. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    fsd
    Не понятно.
    Сознательно комментирую строки освобождения памяти в программе.
    Запускаю из под Deleaker for Visual C++ Setup Version: 2.2.7, (который Standalone кстати)
    только что скачанный на 14 дней триал.
    Указываю - "мониторить память".
    Наблюдаю явную утечку памяти .
    Останавливаю, в результате - "Searching for allocated memory blocks: leaks not detected".

    Судя по всему писать что-то в несколько потоков
    с динамич. выделением памяти - только на С возможно?

    Не подскажете что-то "отдельно стоящего" кроме Deleaker-а ?
    А то теряю веру :)))