Quels sont les effets secondaires de EmptyWorkingSet?

J’utilise le code ci-dessous pour libérer de la mémoire sur certains programmes en cours d’exécution, car mon propre programme nécessite d’importantes ressources de mémoire pour s’exécuter plus rapidement.

[DllImport("psapi.dll")] public static extern bool EmptyWorkingSet(IntPtr hProcess); public FreeMem(ssortingng programName){ EmptyWorkingSet(Process.GetCurrentProcess().Handle); foreach(Process process in Process.GetProcesses(programName)) { try { EmptyWorkingSet(process.Handle); } catch (Exception) { ... } } } 

Il semble fonctionner correctement, j’ai pu réduire l’utilisation de la mémoire de certains programmes tels que l’explorateur de 100 000 Kb à 2 000 Kb. C’est très bien, mais y a-t-il un effet secondaire? Certains logiciels commerciaux l’utilisent également, comme Yamicsoft Vista / Xp manager et Firefox Optimizer, pour ne nommer que ceux-là, alors je me demande si cela n’a pas d’effets secondaires néfastes ou s’il y en a?

Je soupçonne que l’effet secondaire sera la performance de ces autres programmes – le système ramènera les pages permutées par l’appel à EmptyWorkingSet() lorsque le processus en EmptyWorkingSet() besoin.

Il est dangereux de jouer avec le système à un niveau aussi bas: en particulier, les erreurs de page de l’Explorer peuvent ralentir le système au point où d’étranges blocages commencent à se dresser. Il est préférable de laisser cela à Windows, en particulier à d’autres programmes que vous n’avez pas écrits.

Vous trouverez peut-être plus efficace de comprendre pourquoi votre programme a besoin de tant de mémoire. Y a-t-il une fuite quelque part, peut-être?

Personnellement, je n’ai pas affaire à cela. Semble un peu «dangereux»: P

Quoi qu’il en soit, certains articles pourraient vous être utiles:
Problèmes de performances avec EmptyWorkingSet
Gestion de la mémoire – Forcer un processus à libérer de la mémoire