SORU
27 AĞUSTOS 2009, PERŞEMBE


Bellek kullanımını azaltır .NET uygulamaları?

Bellek kullanımını azaltmak için bazı ipuçları nelerdir .NET uygulamaları? Aşağıdaki basit düşünün C# programı.

class Program
{
    static void Main(string[] args)
    {
        Console.ReadLine();
    }
}

Derlenmişbırakınmod için64ve Visual Studio dışında çalışan, Görev Yöneticisi aşağıdaki raporları:

Working Set:          9364k
Private Working Set:  2500k
Commit Size:         17480k

Eğer sadece derlenmiş ise biraz daha iyi86:

Working Set:          5888k
Private Working Set:  1280k
Commit Size:          7012k

Ben o zaman aynı işi yapar ama zamanı başlatma sonra: döşeme süreç boyutu için çalışan takip programı, çalıştı

class Program
{
    static void Main(string[] args)
    {
        minimizeMemory();
        Console.ReadLine();
    }

    private static void minimizeMemory()
    {
        GC.Collect(GC.MaxGeneration);
        GC.WaitForPendingFinalizers();
        SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle,
            (UIntPtr) 0xFFFFFFFF, (UIntPtr)0xFFFFFFFF);
    }

    [DllImport("kernel32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool SetProcessWorkingSetSize(IntPtr process,
        UIntPtr minimumWorkingSetSize, UIntPtr maximumWorkingSetSize);
}

Sonuçları86*Bırakın* dışarıda Visual Studio:

Working Set:          2300k
Private Working Set:   964k
Commit Size:          8408k

Biraz daha iyi olan, ama yine de böyle basit bir program için fazla gibi gözüküyor. Bir C yapmak için herhangi bir hile var# biraz daha yalın süreç? Arka planda çoğu zaman çalıştırmak için tasarlanmış bir program yazıyorum. Yapıyorum herhangi bir kullanıcı arabirimi şeyler ayrı Application Domain yani kullanıcı arabirimi şeyler olabilir güvenli bir şekilde kaldırıldı, ama aldıktan 10 MB zaman sadece oturarak arka plan gibi aşırı.

S. S.Ben neden bakım --- (Güç)kullanıcılar, bu şeyler hakkında endişe eğilimindedir. Eğer yaklaşık performansı üzerinde hiçbir etkisi varsa bile, yarı-teknoloji meraklısı kullanıcılar (benim hedef kitlem) arka plan uygulama bellek kullanımı hakkında öfke nöbeti içine gitmek eğilimindedir. Hatta bellek Adobe Güncelleme alarak 11 MB görüyorum ve oyun bile altında 6 MB alabilir Foobar2000, sakinleştirici dokunarak yatıştırdı hissediyorum korkuyorum. Modern işletim sistemlerinde biliyorum, bu gerçekten çok teknik bir önemi yok, ama bu etkiler bir algı yok anlamına gelmez.

CEVAP
27 AĞUSTOS 2009, PERŞEMBE


.NET uygulamaları yerel uygulamalar her ikisi de süreç içinde çalışma zamanı ve uygulama yüklemek zorunda olması nedeniyle kıyasla daha büyük bir ayak izi var. Eğer gerçekten düzenli istersen .NET en iyi seçenek olmayabilir.

Ancak unutmayın, Eğer uygulama çoğunlukla uyuyor, gerekli bellek sayfaları olacak takas bellek ve böylece gerçekten daha çok bir yük sistemi de büyük bir çoğunlukla.

Eğer küçük ayak izi tutmak isterseniz, bellek kullanımı hakkında düşünmek zorunda kalacaklar. İşte birkaç ipucu:

  • Nesne sayısını azaltmak ve tutmak için emin olun herhangi bir örnek gerekenden daha uzun.
  • List<T> ve P atık yol açabilir gibi gerektiğinde kapasitesini iki katına benzer türde farkında olun.
  • Hakkında daha fazla yığın bellek gücü için referans tipleri değer tipleri kullanarak düşünebilirsiniz, ama varsayılan yığın alanı sadece 1 MB olduğunu unutmayın.
  • Değil sıkıştırılır ve böylece kolayca parçalanmış alabilirsiniz LOH gidecek gibi 85000'den fazla bayt, nesneleri kaçının.

O muhtemelen herhangi bir yolla, ama sadece fikirlerin bir çift ile ayrıntılı bir liste değildir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • george sarintzotis

    george sarin

    2 Aralık 2007
  • kndx

    kndx

    11 Mart 2006
  • Mega64

    Mega64

    24 ŞUBAT 2006