Y a-t-il des méthodes pour optimiser l'espace mémoire utilisé par une
application écrite en C# ?
Y a-t-il des méthodes pour optimiser l'espace mémoire utilisé par une
application écrite en C# ?
Y a-t-il des méthodes pour optimiser l'espace mémoire utilisé par une
application écrite en C# ?
Déjà il faut bien penser ton app pour quelle ne garde pas des références
vers des objets dont tu n'as plus besoin, sinon le garbage collector ne
pourra pas les collecter même si tu ne les utilises plus.
Il y a aussi des objets où tu dois appeler explicitement Dispose() pour
relâcher les ressources associées à ces objets (par exemple un timer ou
des resources unmanaged).
Si vraiment c'est nécessaire, tu peux forcer le garbage collector à des
endroits stratégiques de ton app avec System.GC.Collect() mais c'est
déconseillé et ça peut être lent selon le travail du GC.
Si ça peut te rassurer, on est plusieurs a avoir remarqué que une petite
app en dotnet prend environs 20mb de ram et garde globalement cet usage
de la mémoire même quand l'application devient plus complexe.
[...]
Mais en toute logique si ton application prend 20 mb de ram mais qu'elle
utilise en réalité moins et que la mémoire libre du système diminue
fortement, alors le garbage collector devrait s'activer. Donc en gros
ton application peut prendre 20mb de mémoire temps que ça ne pose pas
problème de ram.
Je pense que ce qui poserait plus de problèmes, c'est
surtout d'avoir un garbage collector qui s'active trop souvent car il
met en pause toute l'application pendant ce processus et cette pause
peut devenir détectable par l’utilisateur.
Déjà il faut bien penser ton app pour quelle ne garde pas des références
vers des objets dont tu n'as plus besoin, sinon le garbage collector ne
pourra pas les collecter même si tu ne les utilises plus.
Il y a aussi des objets où tu dois appeler explicitement Dispose() pour
relâcher les ressources associées à ces objets (par exemple un timer ou
des resources unmanaged).
Si vraiment c'est nécessaire, tu peux forcer le garbage collector à des
endroits stratégiques de ton app avec System.GC.Collect() mais c'est
déconseillé et ça peut être lent selon le travail du GC.
Si ça peut te rassurer, on est plusieurs a avoir remarqué que une petite
app en dotnet prend environs 20mb de ram et garde globalement cet usage
de la mémoire même quand l'application devient plus complexe.
[...]
Mais en toute logique si ton application prend 20 mb de ram mais qu'elle
utilise en réalité moins et que la mémoire libre du système diminue
fortement, alors le garbage collector devrait s'activer. Donc en gros
ton application peut prendre 20mb de mémoire temps que ça ne pose pas
problème de ram.
Je pense que ce qui poserait plus de problèmes, c'est
surtout d'avoir un garbage collector qui s'active trop souvent car il
met en pause toute l'application pendant ce processus et cette pause
peut devenir détectable par l’utilisateur.
Déjà il faut bien penser ton app pour quelle ne garde pas des références
vers des objets dont tu n'as plus besoin, sinon le garbage collector ne
pourra pas les collecter même si tu ne les utilises plus.
Il y a aussi des objets où tu dois appeler explicitement Dispose() pour
relâcher les ressources associées à ces objets (par exemple un timer ou
des resources unmanaged).
Si vraiment c'est nécessaire, tu peux forcer le garbage collector à des
endroits stratégiques de ton app avec System.GC.Collect() mais c'est
déconseillé et ça peut être lent selon le travail du GC.
Si ça peut te rassurer, on est plusieurs a avoir remarqué que une petite
app en dotnet prend environs 20mb de ram et garde globalement cet usage
de la mémoire même quand l'application devient plus complexe.
[...]
Mais en toute logique si ton application prend 20 mb de ram mais qu'elle
utilise en réalité moins et que la mémoire libre du système diminue
fortement, alors le garbage collector devrait s'activer. Donc en gros
ton application peut prendre 20mb de mémoire temps que ça ne pose pas
problème de ram.
Je pense que ce qui poserait plus de problèmes, c'est
surtout d'avoir un garbage collector qui s'active trop souvent car il
met en pause toute l'application pendant ce processus et cette pause
peut devenir détectable par l’utilisateur.
De Simone Alessandro wrote:Déjà il faut bien penser ton app pour quelle ne garde pas des
références vers des objets dont tu n'as plus besoin, sinon le garbage
collector ne pourra pas les collecter même si tu ne les utilises plus.
On m'a toujours dit que c'était le GC qui s'occupait de la destruction
des objets. Dans quels cas est-ce au développeur de les détruire ?
Il y a aussi des objets où tu dois appeler explicitement Dispose()
pour relâcher les ressources associées à ces objets (par exemple un
timer ou des resources unmanaged).
Bon à savoir. Est-ce précisé dans le MSDN systématiquement ?
Si vraiment c'est nécessaire, tu peux forcer le garbage collector à
des endroits stratégiques de ton app avec System.GC.Collect() mais
c'est déconseillé et ça peut être lent selon le travail du GC.
Si ça peut te rassurer, on est plusieurs a avoir remarqué que une
petite app en dotnet prend environs 20mb de ram et garde globalement
cet usage de la mémoire même quand l'application devient plus complexe.
Dans mon cas, il n'y a même pas d'interface graphique vu qu'il s'agit
d'un service. 5 services .NET de ce genre, c'est déjà 100Mo...
[...]
Mais en toute logique si ton application prend 20 mb de ram mais
qu'elle utilise en réalité moins et que la mémoire libre du système
diminue fortement, alors le garbage collector devrait s'activer. Donc
en gros ton application peut prendre 20mb de mémoire temps que ça ne
pose pas problème de ram.
Ok.Je pense que ce qui poserait plus de problèmes, c'est surtout d'avoir
un garbage collector qui s'active trop souvent car il met en pause
toute l'application pendant ce processus et cette pause peut devenir
détectable par l’utilisateur.
Le GC n'est pas sur son propre thread ? Pourquoi bloquerait-il
l'application.
Merci pour ces précisions.
--
Delf
De Simone Alessandro wrote:
Déjà il faut bien penser ton app pour quelle ne garde pas des
références vers des objets dont tu n'as plus besoin, sinon le garbage
collector ne pourra pas les collecter même si tu ne les utilises plus.
On m'a toujours dit que c'était le GC qui s'occupait de la destruction
des objets. Dans quels cas est-ce au développeur de les détruire ?
Il y a aussi des objets où tu dois appeler explicitement Dispose()
pour relâcher les ressources associées à ces objets (par exemple un
timer ou des resources unmanaged).
Bon à savoir. Est-ce précisé dans le MSDN systématiquement ?
Si vraiment c'est nécessaire, tu peux forcer le garbage collector à
des endroits stratégiques de ton app avec System.GC.Collect() mais
c'est déconseillé et ça peut être lent selon le travail du GC.
Si ça peut te rassurer, on est plusieurs a avoir remarqué que une
petite app en dotnet prend environs 20mb de ram et garde globalement
cet usage de la mémoire même quand l'application devient plus complexe.
Dans mon cas, il n'y a même pas d'interface graphique vu qu'il s'agit
d'un service. 5 services .NET de ce genre, c'est déjà 100Mo...
[...]
Mais en toute logique si ton application prend 20 mb de ram mais
qu'elle utilise en réalité moins et que la mémoire libre du système
diminue fortement, alors le garbage collector devrait s'activer. Donc
en gros ton application peut prendre 20mb de mémoire temps que ça ne
pose pas problème de ram.
Ok.
Je pense que ce qui poserait plus de problèmes, c'est surtout d'avoir
un garbage collector qui s'active trop souvent car il met en pause
toute l'application pendant ce processus et cette pause peut devenir
détectable par l’utilisateur.
Le GC n'est pas sur son propre thread ? Pourquoi bloquerait-il
l'application.
Merci pour ces précisions.
--
Delf
De Simone Alessandro wrote:Déjà il faut bien penser ton app pour quelle ne garde pas des
références vers des objets dont tu n'as plus besoin, sinon le garbage
collector ne pourra pas les collecter même si tu ne les utilises plus.
On m'a toujours dit que c'était le GC qui s'occupait de la destruction
des objets. Dans quels cas est-ce au développeur de les détruire ?
Il y a aussi des objets où tu dois appeler explicitement Dispose()
pour relâcher les ressources associées à ces objets (par exemple un
timer ou des resources unmanaged).
Bon à savoir. Est-ce précisé dans le MSDN systématiquement ?
Si vraiment c'est nécessaire, tu peux forcer le garbage collector à
des endroits stratégiques de ton app avec System.GC.Collect() mais
c'est déconseillé et ça peut être lent selon le travail du GC.
Si ça peut te rassurer, on est plusieurs a avoir remarqué que une
petite app en dotnet prend environs 20mb de ram et garde globalement
cet usage de la mémoire même quand l'application devient plus complexe.
Dans mon cas, il n'y a même pas d'interface graphique vu qu'il s'agit
d'un service. 5 services .NET de ce genre, c'est déjà 100Mo...
[...]
Mais en toute logique si ton application prend 20 mb de ram mais
qu'elle utilise en réalité moins et que la mémoire libre du système
diminue fortement, alors le garbage collector devrait s'activer. Donc
en gros ton application peut prendre 20mb de mémoire temps que ça ne
pose pas problème de ram.
Ok.Je pense que ce qui poserait plus de problèmes, c'est surtout d'avoir
un garbage collector qui s'active trop souvent car il met en pause
toute l'application pendant ce processus et cette pause peut devenir
détectable par l’utilisateur.
Le GC n'est pas sur son propre thread ? Pourquoi bloquerait-il
l'application.
Merci pour ces précisions.
--
Delf