2010-06-23 45 views
6

Tôi có một ứng dụng sử dụng System.Timers.Timer các đối tượng để hết hạn và thông báo qua email cũng như các thông báo như vậy. Hiện tại, hệ thống có vài trăm giờ hoạt động cùng một lúc, nhưng chúng tôi sẽ mở rộng việc sử dụng ứng dụng và con số đó có thể bắt đầu mở rộng thành hàng nghìn (có thể không cao hơn 10.000).Tôi có thể tạo bao nhiêu phiên bản System.Timers.Timer? Tôi có thể mở rộng bao xa?

Tôi không thể tìm thấy bất kỳ thông tin nào về việc tăng số lượng Bộ hẹn giờ để tôi cho rằng đó không phải là vấn đề. Có ai biết nếu điều này là có được một vấn đề và tôi nên chủ động xem xét thay đổi cách tôi xử lý hết hạn?

+0

Tôi có câu hỏi tương tự về Threading.Timer. – GregC

+1

@GregC, bạn có thể đăng liên kết tới nó để tôi có thể xem các câu trả lời đó không? – tster

Trả lời

11

Một chút vào cuối ngày này, tôi biết, nhưng. . .

System.Timers.Timer là trình bao bọc xung quanh System.Threading.Timer, lần lượt là trình bao bọc .NET xung quanh Windows 'Timer Queues. Bộ đếm thời gian xếp hàng giờ rất nhẹ - sử dụng ít tài nguyên hệ thống. Tôi đã không thu nhỏ đến hàng nghìn bộ tính giờ, nhưng hàng trăm bộ hẹn giờ chỉ hoạt động tốt. Từ những gì tôi đã có thể thu nhỏ của việc thực hiện, tôi không thể tưởng tượng rằng sẽ có bất kỳ rắc rối với hàng ngàn giờ.

Có thể có một số giới hạn về số giờ bạn có thể có trong bất kỳ hàng đợi hẹn giờ cụ thể nào. Tôi không biết giới hạn đó là gì. Khi tôi điều tra các bộ tính giờ này cách đây một năm hoặc lâu hơn, có vẻ như .NET Framework tạo ra một hàng đợi thời gian cho mỗi quá trình (hoặc có thể là mỗi miền ứng dụng) và tất cả các bộ hẹn giờ bạn tạo được đưa vào hàng đợi đó. Nó có thể không có ý nghĩa để nhân đôi chức năng hàng đợi hẹn giờ bằng cách tạo ra hệ thống của riêng bạn sử dụng một bộ đếm thời gian duy nhất và một số cơ chế xếp hàng ưu tiên để kiểm soát những gì được gọi tiếp theo. Đó là những gì hàng đợi bộ đếm thời gian đã làm cho bạn rồi.

Dường như bạn có thể dễ dàng xây dựng chương trình thử nghiệm tạo 10.000 bộ tính giờ. Đặt từng cái một để đánh dấu một giây sau lần cuối cùng và đặt khoảng thời gian của nó thành 10.000 giây. Sau đó ngồi lại và xem nó đánh dấu. Hoặc có chương trình của bạn theo dõi những người nên đánh dấu vào tiếp theo và những người thực sự đánh dấu tiếp theo.

0

Chỉ sử dụng một bộ hẹn giờ? Bộ hẹn giờ sẽ hết hạn vào ngày hết hạn đầu tiên và thực hiện logic thích hợp khi hết hạn. Sau đó thiết lập lại khoảng thời gian của nó để hết hạn tiếp theo? Chỉ có thể một cách khác để xử lý hết hạn sử dụng chỉ một bộ hẹn giờ.

+2

Rõ ràng có một số cách để không sử dụng nhiều bộ hẹn giờ. Tuy nhiên, tôi tự hỏi nếu nó có giá trị thay đổi mã. – tster

0

Nếu bạn quan tâm, hãy xem tài nguyên hệ điều hành cơ bản mà lớp bộ đếm thời gian dựa vào bằng cách sử dụng Reflector trên DLL hệ thống.

Sau đó, đặt ra những câu hỏi để Mark Russinovich http://blogs.technet.com/b/markrussinovich/

0

Bạn nên sử dụng nhiều trong số chúng. Nhưng như pdiddy nói, bạn thực sự nên xem xét việc thay đổi mã của bạn, nếu bạn có thể. 1 vs 10.000 giờ tạo nên sự khác biệt. ;-)

Các vấn đề liên quan