2010-07-26 3 views
9

Cela fait des années que je me lance dans le delphi et je me suis toujours demandé pourquoi la minimisation et la restauration d'une application l'amènent à utiliser moins de mémoire? A titre d'exemple j'utilise Delphi 7 et je crée un nouveau projet avec rien dessus mais le formulaire vide tous les projets commencent avec puis j'appuie sur F9 pour lancer l'application et ensuite regarder l'utilisation de la mémoire pour l'application et il est assis à environ 3.5mb puis je minimise l'application et l'utilisation de la mémoire descend à environ 760kb et puis je restaure enfin l'application et l'utilisation de la mémoire remonte à environ 1.5mb qui est à peu près la moitié de ce qu'il était quand il a d'abord chargé et cela m'a toujours confus quant à ce qui est en train de se produire et encore plus au point est de commencer l'application avec une directive qui lui fait utiliser la mémoire de 1.5mb au lieu du 3.5mb qu'il utilise normalement.Delphi - Minimize & Restore libère de la mémoire?

Cheers, Dave

+0

"Mémoire" est une définition très vague. Ce que vous voyez est en train de diminuer. Vous pouvez également trouver cet article utile: http://blog.eurekalog.com/catching-memory-leaks/ – Alex

+0

Il est seulement vague après que vous travaillez pour Microsoft assez longtemps. –

Répondre

5

est probablement quelque chose avec des fenêtres de gestion de la mémoire. essayez la même chose avec les fenêtres calculatrice et le comportement est le même :))

ici une réponse: http://support.microsoft.com/?kbid=293215 et certaines personnes ont la même question: http://digital.ni.com/public.nsf/allkb/9EA3D4258E037B8A8625763300434D4D

meilleures salutations,

+0

Merci pour la réponse j'étais plus curieux que n'importe quoi d'autre au moins maintenant je sais que ce n'est pas seulement mes applications ne sont pas les seuls à le faire. Merci encore, Dave – dave

+0

+1 pour l'article de KB – Alex

+0

C'est un bon exemple de Windows où je dis habituellement, quand je devine ce qu'ils ont fait: "[insérer la déclaration imprécatoire forte ici] Je ne peux pas croire qu'ils l'ont fait ! " Windows vous ment, car ils ne pouvaient pas savoir quelles choses ils pourraient vous dire sont les plus proches de la chose que vous voulez savoir, comme la quantité de mémoire utilisée par cette application. Ils ont donc choisi l'une des choses qu'ils savent calculer, et l'ont étiquetée avec une étiquette courte conviviale mais inexacte; "c'est celui que vous cherchez", alors que ce n'est pas le cas. –

4

Here you can find très explication claire de Ian Martins. Lorsque l'application minimise la procédure d'appel système SetProcessWorkingSetSize pour la mémoire inactive libre du processus.

Vous pouvez faire la même chose en ajoutant ce code à votre application. Dans un bouton OnClick vous pouvez le faire:

procedure LiberarMemoria; 
begin 
    if Win32Platform = VER_PLATFORM_WIN32_NT then 
    SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF); 
end; 

L'effet est similaire à minimiser l'application. Si votre application effectue une tâche qui nécessite éventuellement un gros bloc de mémoire, vous pouvez le forcer à libérer après utilisation, en utilisant ce petit code.

Cordialement

+0

Cela m'aurait aidé si l'explication très claire de Ian Marteens avait été en anglais ... –

+2

Citation du lien spécifié: "La chose la plus facile serait courir à partir d'une minuterie, chaque minute, par exemple". Oui en effet. Restez à l'écart de cet article pour votre propre bien. – Alex

+1

@Alexander s'il vous plaît, vérifiez et lisez mon commentaire attentivement et voir que partout où j'ai recommandé que la libération de la mémoire est faite chaque minute. Je dis: « ... Si votre application ne thah une tâche FINALEMENT utiliser un grand bloc de mémoire, vous pouvez le forcer à libérer utiliser après IT » (1) Par la suite (2) APRÈS UTILISATION, pas chaque minute . Je l'ai recommandé, pour l'explication et pour le code. S'il vous plaît, lisez attentivement les réponses. P.D: Excuse pour des erreurs avec l'anglais. –

Questions connexes