Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Узнать тип загрузки потока.  [new]
Ежов Дмитрий Сергеевич
Member

Откуда: Новокузнецк-Москва, Россия
Сообщений: 128
Дня доброго.
Можно ли как то профилировать пток по объему читаемой/записываемой памяти? Ну, тоесть,

вот такой код скорее всего не будет работать с памятью:

procedure TForm1.Button3Click(Sender: TObject);
var
  i: integer;
begin
  i := 0;
  while true do
  begin
    inc(i);
    if i > 10000 then
      i := 0;
  end;
end;


а вот такой - будет
procedure TForm1.Button3Click(Sender: TObject);
var
  i: integer;
  buffer: Array of Byte;
  bufferLength: Cardinal;
begin

  bufferLength := 32000000;
  SetLength(buffer, bufferLength);
  while true do
  begin
    for i := 0 to bufferLength - 1 do
    begin
      buffer[i] := buffer[i] + 1;
    end;
  end;
end;


Есть какие-нибудь средства понять, работает ли поток с памятью?

Сообщение было отредактировано: 24 ноя 21, 15:29
24 ноя 21, 15:27    [22400233]     Ответить | Цитировать Сообщить модератору
 Re: Узнать тип загрузки потока.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

Ежов Дмитрий Сергеевич
Есть какие-нибудь средства понять, работает ли поток с памятью?

Читать код глазками не предлагать?..

Можно поставить хук на менеджер памяти и следить из каких потоков он вызывается.

Posted via ActualForum NNTP Server 1.5

24 ноя 21, 15:40    [22400239]     Ответить | Цитировать Сообщить модератору
 Re: Узнать тип загрузки потока.  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 5302
Ежов Дмитрий Сергеевич,

Перехват менеджера памяти и потоковые счётчики на GetMem/FreeMem.
24 ноя 21, 15:41    [22400240]     Ответить | Цитировать Сообщить модератору
 Re: Узнать тип загрузки потока.  [new]
Ежов Дмитрий Сергеевич
Member

Откуда: Новокузнецк-Москва, Россия
Сообщений: 128
Dimitry Sibiryakov,

я про стороннее приложение речь веду.
24 ноя 21, 15:44    [22400241]     Ответить | Цитировать Сообщить модератору
 Re: Узнать тип загрузки потока.  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 13358
Ежов Дмитрий Сергеевич
я про стороннее приложение речь веду.
Нельзя. Память принадлежит всему процессу
24 ноя 21, 15:46    [22400245]     Ответить | Цитировать Сообщить модератору
 Re: Узнать тип загрузки потока.  [new]
Ежов Дмитрий Сергеевич
Member

Откуда: Новокузнецк-Москва, Россия
Сообщений: 128
Чисто теоретически - это инъекция dll-ки в приложуху и сплайсинг VirtualAlloc.
Но это грубо, так как над ним обычно живут языковые MM, которые могут дробить 64-кб страницы по своему усмотрению.

Вот и вопрос - есть ли какая-то готовая приблуда, которая меряет динамику работы с памятью, хотя бы на уровне VirtualAlloc?
24 ноя 21, 15:49    [22400246]     Ответить | Цитировать Сообщить модератору
 Re: Узнать тип загрузки потока.  [new]
zinpub
Member

Откуда:
Сообщений: 436
Ежов Дмитрий Сергеевич,

Некоторые инcтрументы есть в AQTime
24 ноя 21, 15:52    [22400247]     Ответить | Цитировать Сообщить модератору
 Re: Узнать тип загрузки потока.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

Ежов Дмитрий Сергеевич
есть ли какая-то готовая приблуда, которая меряет динамику работы с памятью,
хотя бы на уровне VirtualAlloc?

Performance Monitor. А при чём тут Дельфи?

Posted via ActualForum NNTP Server 1.5

24 ноя 21, 15:57    [22400248]     Ответить | Цитировать Сообщить модератору
 Re: Узнать тип загрузки потока.  [new]
Ежов Дмитрий Сергеевич
Member

Откуда: Новокузнецк-Москва, Россия
Сообщений: 128
Dimitry Sibiryakov,

и какой счетчик?
24 ноя 21, 16:25    [22400272]     Ответить | Цитировать Сообщить модератору
 Re: Узнать тип загрузки потока.  [new]
Ежов Дмитрий Сергеевич
Member

Откуда: Новокузнецк-Москва, Россия
Сообщений: 128
Dimitry Sibiryakov,

"А при чём тут Дельфи?"
Я других ЯП, кроме Дельфи и 1С не знаю, и подходящих разделов под мой вопрос не нашел.
Пишу там, где могу дать пример.
24 ноя 21, 16:34    [22400279]     Ответить | Цитировать Сообщить модератору
 Re: Узнать тип загрузки потока.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

Ежов Дмитрий Сергеевич
и какой счетчик?

Ах да, я и забыл, что они там глобальные...

Process Explorer в свойствах процесса показывает график приватной памяти
конкретного процесса.

RamMap покажет детали, но вроде как не умеет в графики.

Posted via ActualForum NNTP Server 1.5

24 ноя 21, 16:38    [22400282]     Ответить | Цитировать Сообщить модератору
 Re: Узнать тип загрузки потока.  [new]
Ежов Дмитрий Сергеевич
Member

Откуда: Новокузнецк-Москва, Россия
Сообщений: 128
Dimitry Sibiryakov,

ProcessExplorer покажет ошибки страниц (и дельту), а они будут, если я буду память постоянно выделять.
24 ноя 21, 16:46    [22400288]     Ответить | Цитировать Сообщить модератору
 Re: Узнать тип загрузки потока.  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54790

Ошибки страниц возникают в основном при свопе, а не выделении.

Какую именно проблему-то ты решаешь?..
Правильный раздел: https://www.sql.ru/forum/windows

Posted via ActualForum NNTP Server 1.5

24 ноя 21, 16:49    [22400291]     Ответить | Цитировать Сообщить модератору
 Re: Узнать тип загрузки потока.  [new]
Ежов Дмитрий Сергеевич
Member

Откуда: Новокузнецк-Москва, Россия
Сообщений: 128
Dimitry Sibiryakov,

"Ошибки страниц возникают в основном при свопе, а не выделении."

Даже не знаю, что сказать. А вы - точно специалист?

Запустите этот код и посмотрите, как быстро процесс выберется в топ ошибок страниц. И сколько он будет потреблять памяти.

procedure TForm1.Button3Click(Sender: TObject);
var
  i: integer;
  buffer: Array of Byte;
  bufferLength: Cardinal;
  s:String;
begin
  bufferLength := 500000;
  s:='';
  while true do
  begin
    for i := 0 to bufferLength - 1 do
    begin
      SetLength(buffer, bufferLength);
      buffer[i] := buffer[i] + 1;
      SetLength(buffer, 0);
    end;
  end;
end;


Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста.


Сообщение было отредактировано: 24 ноя 21, 19:34
24 ноя 21, 18:34    [22400358]     Ответить | Цитировать Сообщить модератору
 Re: Узнать тип загрузки потока.  [new]
Ежов Дмитрий Сергеевич
Member

Откуда: Новокузнецк-Москва, Россия
Сообщений: 128
Dimitry Sibiryakov,

"Правильный раздел: https://www.sql.ru/forum/windows"
Спасибо, буду писать там.
24 ноя 21, 18:35    [22400359]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить