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

  • Air_Fooj

    Air_Fooj

    24 NİSAN 2009
  • B4ROK

    B4ROK

    1 EKİM 2008
  • TheDamnWreckless

    TheDamnWreck

    12 Temmuz 2010