Ir al contenido


Foto

Sobre liberar memoria


  • Por favor identifícate para responder
7 respuestas en este tema

#1 look

look

    Advanced Member

  • Miembros
  • PipPipPip
  • 418 mensajes
  • LocationLa Ceiba-Atlantida-Honduras

Escrito 10 mayo 2010 - 03:54

hola compañeros, quisiera modificar el siguiente procedimiento para utilizarlo con otro proceso
no se si se pueda,se el nombre del proceso, espero me ayuden.


delphi
  1. procedure LiberarMemoria;
  2. begin
  3.   if Win32Platform = VER_PLATFORM_WIN32_NT then
  4.     SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
  5. end;




  • 0

#2 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 10 mayo 2010 - 04:56

Prueba buscando el ID del proceso, abrir un Handle el mismo y luego usar SetProcessWorkingSetSize:



delphi
  1. function GetProcessId(FileName: String): DWORD;
  2. var
  3.   proc: TProcessEntry32;
  4.   hSysSnapshot: THandle;
  5. begin
  6.   proc.dwSize := SizeOf(TProcessEntry32);
  7.   hSysSnapshot:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  8.   if (hSysSnapshot <> INVALID_HANDLE_VALUE) and Process32First(hSysSnapshot, proc) then
  9.   begin
  10.     repeat
  11.       if String(proc.szExeFile) = FileName then
  12.       begin
  13.         Result:= proc.th32ProcessID;
  14.         break;
  15.       end;
  16.     until not (Process32Next(hSysSnapshot, proc));
  17.   end;
  18.   CloseHandle(hSysSnapshot);
  19. end;
  20.  
  21. procedure LiberarMemoria;
  22. var
  23.   hProcess: THandle;
  24. begin
  25.   hProcess:= OpenProcess(PROCESS_ALL_ACCESS, false, GetProcessId('notepad.exe'));
  26.   if Win32Platform = VER_PLATFORM_WIN32_NT then
  27.     SetProcessWorkingSetSize(hProcess, $FFFFFFFF, $FFFFFFFF);
  28.   CloseHandle(hProcess);
  29. end;



Saludos.
  • 0

#3 look

look

    Advanced Member

  • Miembros
  • PipPipPip
  • 418 mensajes
  • LocationLa Ceiba-Atlantida-Honduras

Escrito 11 mayo 2010 - 08:14

Prueba buscando el ID del proceso, abrir un Handle el mismo y luego usar SetProcessWorkingSetSize:



delphi
  1. function GetProcessId(FileName: String): DWORD;
  2. var
  3.   proc: TProcessEntry32;
  4.   hSysSnapshot: THandle;
  5. begin
  6.   proc.dwSize := SizeOf(TProcessEntry32);
  7.   hSysSnapshot:= CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  8.   if (hSysSnapshot <> INVALID_HANDLE_VALUE) and Process32First(hSysSnapshot, proc) then
  9.   begin
  10.     repeat
  11.       if String(proc.szExeFile) = FileName then
  12.       begin
  13.         Result:= proc.th32ProcessID;
  14.         break;
  15.       end;
  16.     until not (Process32Next(hSysSnapshot, proc));
  17.   end;
  18.   CloseHandle(hSysSnapshot);
  19. end;
  20.  
  21. procedure LiberarMemoria;
  22. var
  23.   hProcess: THandle;
  24. begin
  25.   hProcess:= OpenProcess(PROCESS_ALL_ACCESS, false, GetProcessId('notepad.exe'));
  26.   if Win32Platform = VER_PLATFORM_WIN32_NT then
  27.     SetProcessWorkingSetSize(hProcess, $FFFFFFFF, $FFFFFFFF);
  28.   CloseHandle(hProcess);
  29. end;



Saludos.


gracias por responder....
me da problemas con el TProcessEntry32, ¿ en que uses se encuentra?


  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 11 mayo 2010 - 08:16

No es una Unidad sino una Clase, parece que a nuestro amigo Escafandra se le escapo la declaracion de dicha clase.

Saludos.
  • 0

#5 look

look

    Advanced Member

  • Miembros
  • PipPipPip
  • 418 mensajes
  • LocationLa Ceiba-Atlantida-Honduras

Escrito 11 mayo 2010 - 08:20

parece ser la Tlhelp32
  • 0

#6 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 11 mayo 2010 - 08:26

Saludos.

En la unidad TlHelp32.
  • 0

#7 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 11 mayo 2010 - 11:05

...me da problemas con el TProcessEntry32, ¿ en que uses se encuentra?


No es una Unidad sino una Clase, parece que a nuestro amigo Escafandra se le escapo la declaracion de dicha clase.

parece ser la Tlhelp32

En la unidad TlHelp32.


Se han dado cuenta rápidamente. Se me olvidó aclarar ese detalle:



delphi
  1. uses TLHelp32;


  • 0

#8 look

look

    Advanced Member

  • Miembros
  • PipPipPip
  • 418 mensajes
  • LocationLa Ceiba-Atlantida-Honduras

Escrito 11 mayo 2010 - 11:07


...me da problemas con el TProcessEntry32, ¿ en que uses se encuentra?


No es una Unidad sino una Clase, parece que a nuestro amigo Escafandra se le escapo la declaracion de dicha clase.

parece ser la Tlhelp32

En la unidad TlHelp32.


Se han dado cuenta rápidamente. Se me olvidó aclarar ese detalle:



delphi
  1. uses TLHelp32;


jeje , asi parece, gracias compañero :)

  • 0




IP.Board spam blocked by CleanTalk.