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

  • AFISHAL

    AFISHAL

    7 Mart 2009
  • Jordie Jordan

    Jordie Jorda

    27 Ocak 2008
  • OnlyFunClips

    OnlyFunClips

    16 ŞUBAT 2012