Может, кто-нибудь знает что это такое?
Windows 10
До выполнения выделено памяти 7 Мб
После выполнения 10 Мб
Пик выделения 99 Мб
Куда захавало 3 Мб. Причем, если выполнить несколько/много раз, то больше 3-4 Мб не поднимается.
Также заметил, что если долго ничего не делать, память вернулась обратно до 7 Мб (Долго это около часа)
Windows 7 - хавает примерно 600 Кб
Суть: Есть сервис, работает с OLE приложением. Пихает в него большие вариантные массивы созданные через VarArrayCreate. Пик памяти до 5 Гб доходит, когда в очереди накапливается много массивов.
После такого прохода, остается висеть около 250 Мб. Если запустить процесс еще несколько раз, останутся те же 250 Мб. И пик будет тот же.
Грешил на обертку Delphi, но вижу что прямой вызов ведет также.
Теоретически, все равно сколько памяти сожрало и не отдало, ее много и не жалко, но хочется понимать модель поведения...
procedure TForm1.Button1Click(Sender: TObject);
var
List: TArray<PSafeArray>;
k: Int32;
Bound: packed array[0..1] of SAFEARRAYBOUND;
begin
Bound[0].cElements := 1000;
Bound[0].lLbound := 0;
Bound[1].cElements := 10;
Bound[1].lLbound := 0;
SetLength(List, 500);
for k := 1 to 500 do
begin
List[k - 1] := SafeArrayCreate(VT_VARIANT, 2, @Bound);
end;
for k := 1 to 500 do
SafeArrayDestroy(List[k - 1]);
end;