Tôi đã tìm kiếm câu hỏi này nhưng không thấy câu trả lời. Nếu nó là một bản sao tôi sẽ sẵn sàng đóng nó lại.Thread.Sleep (1) mất nhiều hơn 1ms
Tôi hiện đang cố gắng thực hiện một số đánh giá hiệu suất về công nghệ và thấy một số kết quả không thể tin được vì vậy tôi đã quyết định thử nghiệm một số. Trong đó tôi muốn thử xem liệu lớp Đồng hồ bấm giờ có trả lại những gì tôi mong đợi không.
Stopwatch sw = Stopwatch.StartNew();
Thread.Sleep(1);
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Trong trường hợp này, tôi thấy khá nhiều giá trị trả về là 15ms. Tôi hiểu độ phân giải của DateTime để được xung quanh có nhưng không nên Thread.Sleep (1) ngủ một sợi cho 1ms? Hệ thống tôi đang trả về Stopwatch.IsHighResolution đúng và hoạt động của nó trong .NET 4.
Bối cảnh: Biểu mẫu đầy đủ và phù hợp này nhằm thu thập một số số trên yêu cầu nhận được Aerospike db. DB không nằm trên cùng một hộp. Khi tôi in ra các sw.ElapsedMilliseconds khi một truy vấn ở giữa tôi nhìn thấy hầu hết các phản ứng phụ millisecond và có vẻ nghi ngờ một chút xem xét mã Java tương đương của tôi là trở lại nhiều hơn đáng tin cậy 5ms-15ms phản ứng hầu hết thời gian. Mã Java đang sử dụng sự khác biệt của System.nanoTime(). Bởi phản ứng submilli trong mã C# của tôi, tôi có nghĩa là Console.WriteLine (sw.ElapsedMilliseconds) in 0.
Tôi nghĩ rằng với số tiền rất thấp, nó sẽ mất nhiều cảm ơn thời gian thực tế cho một sợi đi ngủ và thức dậy một lần nữa. Tôi đề nghị bạn thử và tăng đối số 'sleep()' và xem số đối số và thời gian ngủ thực tế sẽ bằng nhau. – Mehraban
Tôi đã tăng dần lên đến khoảng 100 và tôi vẫn liên tục thấy cao hơn từ 5 đến 15 mili giây. Tôi hiểu nó không phải là một hệ điều hành thời gian thực nhưng tôi không mong đợi để thấy điều này – Rig
Tôi sẽ không nói nó nhất thiết phải là một bản sao nhưng câu trả lời là có. Tôi có nên xóa câu hỏi này không? – Rig