Düzeltme: .NET Framework 1. 0'da DateTimePicker denetimini kullandığınızda, bir bellek sızıntısı fark edebilirsiniz

Makale çevirileri Makale çevirileri
Makale numarası: 813354 - Bu makalenin geçerli olduğu ürünleri görün.
Bu makale arşivlenmiştir. "Olduğu gibi" sunulmaktadır ve bundan sonra güncelleştirilmeyecektir.
Hepsini aç | Hepsini kapa

Bu Sayfada

Belirtiler

Microsoft .NET Framework sürüm 1.0 kullanan bir uygulama oluşturmak ve bu uygulamada da DateTimePicker denetimini kullanın, uygulamayı çalıştırdığınızda bellek sızıntısı fark edebilirsiniz.

Neden

Bu sorun, çöp toplayıcısını erişilemez bellek toplamaz nedeniyle oluşur. DateTimePicker denetimini Microsoft.Win32.UserPreferenceChangedEventHandler temsilci ile ilişkilidir. Yönlendiricide başvuru DateTimePicker denetimini bir nesne çıkardığınızda, bu temsilci yapıldı değil. Bu nedenle, bu temsilci, DateTimePicker denetimini nesne toplama gelen çöp toplayıcısını engeller.

Çözüm

Bu sorunu gidermek için <a0></a0>, .NET Framework 1.0 için en son hizmet paketini edinin.

En son hizmet paketini edinmek için aşağıdaki Microsoft Web sitesini ziyaret edin:
http://www.microsoft.com/downloads/details.aspx?familyid=6978D761-4A92-4106-A9BC-83E78D4ABC5B&displaylang=en

Durum

Microsoft, "Geçerli Olduğu Ürünler" bölümünde listelenen Microsoft ürünlerinde bu sorunun olduğunu onaylamıştır. Bu sorun, ilk olarak Microsoft giderilmiştir .NET Framework 1.0 Service Pack 3.

Daha fazla bilgi

Davranışı Yeniden Oluşturma Adımları

  1. Microsoft Windows uygulaması oluşturun. Bunu yapmak için şu adımları izleyin:
    1. Microsoft Visual Studio .NET'i başlatın.
    2. Dosya menüsünde Yeni ' nin üzerine gelin ve sonra Project ' i tıklatın. <a0>New Project</a0> iletişim kutusu görüntülenir.
    3. Project Types altında Visual C# Projects ' ı tıklatın.
    4. Şablonları altında Windows uygulaması) tıklatın.
    5. Adı kutusuna, MyProject yazın ve Tamam ' ı tıklatın. Varsayılan olarak, Form1 adlı bir form oluşturulur.
    6. Görünüm menüsünden araç kutusu ' nu tıklatın.
    7. Üç TextBox denetimi Form1 forma ekleyin. Varsayılan olarak, textBox1TextBox denetimine textBox2TextBox denetimine ve textBox3TextBox denetimine oluşturulur.
    8. Iki Düğme denetimi Form1 forma ekleyin. Varsayılan olarak, Düğmebutton1 denetimi ve Düğmebutton2 denetimi oluşturulur.
    9. Form1 formu. Form1_Load olay işleyicisine aşağıdaki kodu ekleyin
      GC.Collect();
      GC.WaitForPendingFinalizers();
      long before = GC.GetTotalMemory(true);
      textBox1.Text ="Before test: " + before.ToString();
      GC.GetTotalMemory yöntemi şu anda yönetilen bellekte ayrılan bayt sayısını alır.
    10. Form1 formdaki button1 ' ı çift tıklatın ve sonra da <a0>Form1</a0> formunun Button1_Click olay işleyicisine aşağıdaki kodu ekleyin.
      long after;
      for (int i=0; i<100; i++) 
      {
      DateTimePicker dtp=new DateTimePicker();	
      dtp.Dispose();
      dtp=null;
      }
      after = GC.GetTotalMemory(true);
      textBox2.Text = " After test: " + after.ToString();
    11. Form1 formdaki button2 ' ı çift tıklatın ve sonra Form1 formu. button2_Click olay işleyicisine aşağıdaki kodu ekleyin
      GC.Collect();
      GC.WaitForPendingFinalizers();
      long after = GC.GetTotalMemory(true);
      textBox2.Text = " After Garbage Collection: " + after.ToString();
      GC.Collect yöntemini çöp toplama zorlar ve tüm erişilemiyor ve dereferenced bellek toplanacak çalışır.
    12. Tümünü Kaydet tüm dosyaları kaydetmek için Dosya menüsünden'ı tıklatın.
  2. Oluşturup sonra da Windows uygulamasını çalıştırın. Bunu yapmak için şu adımları izleyin:
    1. Yapı) menüsünde tıklatın Build Solution.
    2. Hata Ayıkla) menüsünde, Başlat ' ı tıklatın. <a0>Form1</a0> iletişim kutusu görüntülenir. Yönetilen bellekte ayrılan bayt sayısı, textBox1 metin kutusunda görünür.
    3. Button1 Ek Yardım düğmesini tıklatın.

      Uygulama, çalıştırma sırasında DateTimePicker denetimini bir örneğini oluşturur ve sonra da DateTimePicker denetimini bırakan. Bu davranış, 100 kez oluşur. Sonra 100 oluşumları yönetilen bellekteki bayt textBox2 metin kutusunda görünür. Çöp toplayıcısını erişilemez bellek konumlarını toplamaz.
    4. Button2</a1> seçeneğini tıklatın.

    Çöp toplayıcısını uygulama çağrıları sonrasında yönetilen bellekte kalmaları bayt textBox2 metin kutusunda görünür. Bu çoğu erişilemez olduğunu fark edebilirsiniz bellek hala yönetilen bellektir.
Ek bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
824684Microsoft yazılım güncelleştirmelerini açıklamak için kullanılan standart terminolojinin açıklaması

Referanslar

UserPreferenceChangedEventHandler temsilci hakkında daha fazla bilgi için ziyaret edin, aşağıdaki Microsoft Developer Network (MSDN) Web sitesi:
http://msdn2.microsoft.com/en-us/library/microsoft.win32.userpreferencechangedeventhandler(vs.71).aspx
DateTimePicker sınıfı hakkında daha fazla bilgi için aşağıdaki MSDN Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/system.windows.forms.datetimepicker(vs.71).aspx

Özellikler

Makale numarası: 813354 - Last Review: 3 Şubat 2014 Pazartesi - Gözden geçirme: 1.5
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft .NET Framework 1.0
Anahtar Kelimeler: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbmemory kbgarbagecollect kbforms kbcode kbbug kbfix kbqfe kbnetframe100presp3fix KB813354 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:813354

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com