2009-11-28 25 views
7

Estoy usando el siguiente código para liberar memoria en algunos programas en ejecución porque mi propio programa necesita recursos de memoria grandes para funcionar más rápido.¿Cuáles son los efectos secundarios de usar EmptyWorkingSet?

[DllImport("psapi.dll")] 
public static extern bool EmptyWorkingSet(IntPtr hProcess); 

public FreeMem(string programName){ 

     EmptyWorkingSet(Process.GetCurrentProcess().Handle); 
     foreach(Process process in Process.GetProcesses(programName)) 
     { 
      try 
      { 
       EmptyWorkingSet(process.Handle); 
      } 
      catch (Exception) 
      { 
       ... 
      } 
     } 
} 

Parece estar funcionando bien, yo era capaz de reducir el uso de memoria de algunos programas como el explorador de 100.000 Kb hasta 2.000 Kb. Eso es bastante bueno, pero ¿hay algún efecto secundario al hacer esto? Algunos software comerciales también están usando esto como el administrador de Yamicsoft Vista/Xp y Firefox Optimizer por nombrar algunos, así que estoy pensando si esto no tiene efectos secundarios negativos o ¿hay alguno?

Respuesta

2

Sospecho que el efecto secundario será el rendimiento de esos otros programas - el sistema traerá las páginas intercambiado por la llamada a EmptyWorkingSet() de nuevo en el proceso cuando las necesita.

Messing con el sistema en un nivel tan bajo está lleno de peligros: en particular, los errores de página Explorer pueden ralentizar el sistema hasta el punto en el que los puntos muertos extrañas comienzan a criar a sus feas cabezas. Lo mejor es dejar esto en Windows, en particular para otros programas que no haya escrito.

Puede que le resulte más eficiente comprender por qué su propio programa necesita tanta memoria. ¿Hay alguna fuga en alguna parte, tal vez?

+0

tal vez tengas razón. Trataré de encontrar una manera de optimizar mi propio programa en lugar de optimizar los otros programas y eliminar EmptyWorkingSet si es peligroso. – murasaki5

Cuestiones relacionadas