2012-02-14 39 views
13

Như chúng ta đều biết đồng hồ bấm giờ có thể gặp sự cố trong ứng dụng không đồng bộ đa luồng sẽ chạy trên tất cả các lõi.Đồng ý và chuỗi nhận biết .Net đồng hồ bấm giờ?

Trên máy tính đa bộ xử lý, không cần biết bộ xử lý nào chạy trên đó. Tuy nhiên, do lỗi trong BIOS hoặc Lớp trừu tượng phần cứng (HAL), bạn có thể nhận được các kết quả thời gian khác nhau trên các bộ vi xử lý khác nhau. Để xác định ái lực bộ xử lý cho một luồng, hãy sử dụng phương thức ProcessThread.ProcessorAffinity.

Có cách nào để tôi nhận được dấu tick/dấu thời gian đáng tin cậy như các giá trị có độ phân giải/độ chính xác cao nhất quán trên lõi CPU không?

Nếu không thể làm cho đồng hồ bấm giờ (QueryPerformanceCounter) an toàn đa lõi, cách tốt nhất tiếp theo để có được dấu thời gian tốt trên lõi là gì? DateTime.UtcNow.Ticks hoặc Environment.TickCount? Bất kỳ quầy nào khác?

Tôi cần độ phân giải tốt hơn so với những gì DateTime.UtcNow.Ticks có thể cung cấp. (10-15ms)

Trả lời

7

Tôi đã tìm kiếm câu trả lời cho vấn đề cụ thể này cho bản thân mình và tốt nhất mà tôi đã thấy là DateTime.UtcNow. Dường như không có Windows nào có độ phân giải cao và bộ đếm đáng tin cậy (Tôi đã googled cho một độ tuổi và vẫn chưa gặp phải).

+0

mã mẫu sử dụng? –

5

Thực tế, theo số official documentation, sau Windows XP, bạn chỉ nên sử dụng StopWatch/QueryPerformanceCounter trên các hệ thống đa xử lý. Nếu hệ thống không hỗ trợ TSC bất biến, QPC sẽ tự động sử dụng một chiến lược hẹn giờ khác.

Tuy nhiên, hãy lưu ý phần bình luận cho các hệ thống ảo hóa. Có vẻ như bạn phải cẩn thận trong trường hợp cụ thể đó.

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