2012-12-25 7 views
21

Olası Çoğalt:
How to get memory available or used in C#nasıl bir uygulama tarafından kullanılan bellek miktarını almak için

benim uygulamasının statusbar benim uygulama tarafından kullanılan bellek resimlemek istiyorum . Ben bir memoryleak arıyorum - ama nerede bilmiyorum. Şimdi, benim fikrim, kullanılan bellek ile durum çubuğunda görselleştirmek, böylece uygulama ile çalışırken ve problemin oluştuğu kısmı bulabildiğimde görebiliyorum ve sonra bunu profilleyebilirim.

Birisi bana biraz yardım edebilir mi, kullanılmış belleği nasıl alabilirim?

long memory = GC.GetTotalMemory(true); 

cevap

22

Aşağıdaki işlevi kullanabilirsiniz (doğru parametre ilk koleksiyonunu gerçekleştirmek GC söyler) Hangi iş akışının bellek kullanımını anormal bir şekilde yükselttiğini belirledikten sonra uygulamayı CLR Profiler veya başkaları ile profilleyin.

+0

Yinede belirtildiği gibi, dikkat: Bu çözüm yalnızca yönetilen yığına bakar. Tam işlem boyutunu elde etmek için: https://stackoverflow.com/a/750595/331281 – Dejan

-1

Neden sadece taskmanager veya Sysinternals ve sadece daha gelişmiş araçlar ile bellek kullanımını izlemek:

8

Sen GC.GetTotalMemory deneyebilirsiniz:

Halen tahsis edilecek düşünülen bayt sayısını alır. Bir parametre, sistemin çöp toplayıp bitmesine izin vermek için bu yöntemin geri dönmeden önce kısa bir süre bekleyip bekleyemeyeceğini belirtir.


veya

using System.Diagnostics; 

Process currentProc = Process.GetCurrentProcess(); 

geçerli bir referans işlemi için sahip olduktan

, sen PrivateMemorySize64 özelliğini okuyarak onun bellek kullanımı belirleyebilir. Eğer uygulama tarafından kullanılan bellek izlemek istiyorsanız

long memoryUsed = currentProc.PrivateMemorySize64; 
+1

aynı mı? – mcmillab

2

, bunun için kod yazmak gerekmez. Sadece Windows (http://www.codeproject.com/Articles/8590/An-Introduction-To-Performance-Counters) performans sayaçlarını kullanın. İhtiyacınız olan bilgileri grafiklerle sağlayacaklar! Çok sayıda bellek sayacı (http://msdn.microsoft.com/en-us/library/x2tyfybc.aspx) var, bunlardan biri ihtiyaç duyduğunuz veriye sahip olacak ve sanırım uygulamanızın gerekenden daha fazla bellek kullanmaya başladığında size yardımcı olacak. Ancak, bu bilgileri uygulamanıza koymanız gerekiyorsa, yine de performans sayaçlarını kullanabilirsiniz. .NET, verilerine erişmek için System.Diagnostics ad alanında sınıflara sahiptir. Şu örneğe bakın: http://www.geekpedia.com/tutorial211_Using-Performance-Counters-in-Csharp.html