2010-06-23 13 views
6

System.Timers.Timer nesnelerini son kullanma ve e-posta bildirimleri yapmak için kullanan bir uygulama var. Şu anda sistem birkaç yüz zamanlayıcısını bir anda yaşıyor, ancak uygulamanın kullanımını genişletiyor olacağız ve bu sayı binlerce (muhtemelen 10,000'den fazla olmayan) ölçeklemeye başlayabilir.Kaç tane System.Timers.Timer örneği oluşturabilirim? Ne kadar ölçeklendirebilirim?

Zamanlayıcı sayısını artırmak için herhangi bir bilgi bulamıyorum, bu yüzden sorun olmayacağını düşünüyorum. Bunun bir sorun olup olmayacağını bilen var mı ve proaktif olarak son kullanma sürecini nasıl değiştirdiğimi değiştirmeli miyim?

+0

Threading.Timer hakkında benzer bir sorum var. – GregC

+1

@GregC, bu bağlantılara bir bağlantı gönderebilir miyim? – tster

cevap

11

Biraz için soruyu ama. . .

System.Timers.Timer, System.Threading.Timer boyutunda bir sarıcıdır ve bu da Windows 'Timer Queues civarında bir .NET sarıcısıdır. Zamanlayıcı sıra zamanlayıcıları çok hafiftir - az sayıda sistem kaynağı kullanın. Binlerce zamana hitap etmedim, ancak yüzlerce zamanlayıcı gayet iyi çalışıyor. Uygulamadan ne kadar azını toplayabildiğimden, binlerce zamanlayıcının problemi olacağını hayal bile edemiyorum.

Belirli bir zamanlayıcı sırasındaki zamanlayıcı sayısında muhtemelen bir sınırlama vardır. Bu sınırın ne olduğunu bilmiyorum. Bu zamanlayıcıları bir yıl veya daha önce incelediğimde, .NET Framework'ün işlem başına bir zamanlayıcı sırası (veya uygulama alanı başına) oluşturduğuna benziyordu ve oluşturduğunuz tüm zamanlayıcılar bu sıraya dahil edildi.

Muhtemelen ne zaman çağrılırsa kontrol etmek için tek bir zamanlayıcı ve bazı öncelik sırasını kullanan kendi sisteminizi oluşturarak zamanlayıcı sıra işlevini çoğaltmak mantıklı değildir. Zamanlayıcı kuyruğu sizin için zaten böyle.

Kolayca 10,000 zamanlayıcı oluşturan bir sınama programı oluşturabilirsiniz. Her birini sondan sonra bir saniye işaretlemek için ayarlayın ve süresini 10.000 saniyeye ayarlayın. Ardından arkanıza yaslanın ve izleyin. Ya da programınızı kimin kimler tarafından işaretleneceğini ve kimin bir sonraki adımı atacağını takip etmesini sağlayın.

0

Sadece bir zamanlayıcı kullanımına ne dersiniz? Zamanlayıcı ilk son kullanma tarihinde sona erecek ve son kullanma tarihi geçtikten sonra uygun mantığı gerçekleştirecektir. Ardından, bir sonraki son kullanma tarihine kadar sıfırlayın. Sadece bir zamanlayıcı kullanarak son kullanma işleminin başka bir yolu olabilir.

+2

Açıkçası, çok sayıda zamanlayıcı kullanmamanın bir kaç yolu var. Ancak, kodu değiştirmeye değer olup olmadığını merak ediyorum. – tster

0

Bunların çoğunu kullanarak iyi olmalısınız. Ama pdiddy'nin dediği gibi, eğer yapabiliyorsanız, kodunuzu değiştirmeyi düşünmelisiniz. 1 vs 10,000 zamanlayıcı fark yaratıyor. ;-)

İlgili konular