SORU
11 Ocak 2012, ÇARŞAMBA


Neden İplik.Uyku kadar zararlı

Ben sık sık Thread.Sleep(); kullanılmaması gereken söz bakın, ama bunun neden böyle olduğunu anlayamıyorum. Thread.Sleep(); sorun neden olabilir eğer güvenli olacağını aynı sonucu başka alternatif çözümler var mı?

örn.

while(true)
{
    doSomework();
    i  ;
    Thread.Sleep(5000);
}

başka biri:

while (true)
{
    string[] images = Directory.GetFiles(@"C:\Dir", "*.png");

    foreach (string image in images)
    {
        this.Invoke(() => this.Enabled = true);
        pictureBox1.Image = new Bitmap(image);
        Thread.Sleep(1000);
    }
}

CEVAP
11 Ocak 2012, ÇARŞAMBA


Thread.Sleep arama ile sorunları explained quite succinctly here

Thread.Sleep kullanımı:/bir MTA iş parçacığı, hata ayıklama. test ederken uzun işlemleri simüle .NET orada başka bir nedenle kullanmak.

Thread.Sleep(n) de en az sayı kadar geçerli iş parçacığı engeller ngerçekleşebilecek bir timeslices (veya iplik hissesinin) milisaniye. Bir timeslice uzunluğu/türleri farklı sürümlerinde farklıdır Windows ve farklı işlemciler ve genellikle aralıkları 15 30 milisaniye. Bu konu için engellemek için neredeyse garantidir demektir daha fazla n milisaniye. Olasılık konu olacak yeniden uyandırmak n milisaniye olarak imkansız sonra tam olarak imkansız olabilir.Yani, Thread.Sleep zamanlama için anlamsızdır.

Konuları sınırlı bir kaynaktır, yaklaşık 200.000 döngüleri alıyorlar oluşturmak ve yok etmek için yaklaşık 100.000 döngüleri. Varsayılan onlar tarafından yığın ve kullanmak için kendi sanal bellek yedek 1 megabayt 2,000-8,000 her içerik için anahtar döngüsü.Bu herhangi bekleyen bir iş parçacığı yapar büyükatık.

Tercih edilen çözüm: WaitHandles

En çok yapılan hata-inşa ederken(, *demo and answer*19) bir Thread.Sleep kullanıyor

DÜZENLEME:
Benim cevabım geliştirmek istiyorum:

Kullanım durumları farklı 2: 1) bildiğimiz için bekliyoruz zaman dilimi devam etmeliyiz belirli (Thread.Sleep, System.Threading.Timer benzeri yerleri) 2) bazı durum değişiklikleri nedeniyle bir süre bekliyoruz ... anahtar kelime(ler)/bazı zaman! eğer durumu-onay kodu-etki bizim, biz ise harici bileşen gerektiğini aksi takdirde WaitHandles kullanmak gerekir kanca çeşit sağlamak ... eğer tasarımı değil mi kötü! Benim cevap ağırlıklı olarak kullanılması-örnek 2 kapsar

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HER0R

    HER0R

    16 Aralık 2007
  • Samvith V Rao

    Samvith V Ra

    20 EKİM 2006
  • Tylerron

    Tylerron

    6 AĞUSTOS 2006