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
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ığı engellern
gerç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 fazlan
milisaniye. Olasılık konu olacak yeniden uyandırmakn
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
Neden&; dizi yineleme için... "* o kad...
Neden `1000000000000000 aralığı(100000...
Neden C derleme bu kadar uzun sürüyor?...
Neden tanıtan bir işe yaramaz MOV tali...
Neden “while(true)” “Parçacığı.olmadan...