Buen dia Foro.
Antes que nada quiero compartir con ustedes una clases para el consumo de WMI
https://github.com/R...class-generator
Tengo un servicio que esta monitoreando la carga de UPS, mi problema es que no se libera la memoria, el consumo empieza a incrementarce con el tiempo, ya le agregue dos codigoa para liberar memoria pero no funciona, el servicio esta corriendo sobre un server Window 2008 R2 64bit les dejo el codigo que se ejecuta
1. Este se ejecuta cada 5segundos con un timer
procedure TService1.Timer1Timer(Sender: TObject); var LBatery : TWin32_Battery; begin LIB_IniLoad; LBatery := TWin32_Battery.Create; if ((LBatery.EstimatedChargeRemaining <= _INI_LECTURA_MIN) And (Length(LBatery.Name)>0)) then begin LIB_GrabaLog('Dando de baja el servidor .. carga al '+IntToStr(LBatery.EstimatedChargeRemaining)); BajaServer; end; LBatery.Free; Application.ProcessMessages; LiberarMemoria; Optimizar_memoria; end;
2. Estos son los procedimientos que implemente para la liberarción de memoria
procedure LiberarMemoria; begin if Win32Platform = VER_PLATFORM_WIN32_NT then SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF); end; procedure Optimizar_memoria; var MainHandle : THandle; begin try MainHandle := OpenProcess(PROCESS_ALL_ACCESS, false, GetCurrentProcessID); SetProcessWorkingSetSize(MainHandle,DWORD(-1),DWORD(-1)); finally CloseHandle(MainHandle); end; end;
Gracias de Antemano