2011-12-28 24 views
15

System.Diagnostics.Stopwatch đếm thời gian trong khi máy tính đứng không?Có phải .NET Stopwatch standby/sleep/hibernate không?

+0

Thú vị câu hỏi, Tôi đã từng sử dụng đồng hồ bấm giờ cho hồ sơ của người đàn ông nghèo nàn nên điều này không bao giờ xảy ra với tôi. – Davy8

+4

Câu hỏi hay .... hãy thử và cho chúng tôi biết :) –

+0

Như bạn có thể nói từ câu trả lời, đây là hành vi cụ thể của việc triển khai thực hiện. Bộ đếm được bọc bởi Lớp trừu tượng phần cứng của hệ điều hành, cho các nhà thiết kế phần cứng nhiều tùy chọn để cắt xu. –

Trả lời

3

Có nó.

Nhìn vào đoạn code trong Reflector cho thấy rằng nếu nó không phải là Stopwatch.IsHighResolution, sau đó nó sẽ sử dụng truy cập đánh dấu (trong môi trường của tôi, giá trị là false vì vậy nó sẽ sử dụng DateTime.UtcNow.Ticks):

public void Start() 
{ 
    if (!this.isRunning) 
    { 
     this.startTimeStamp = GetTimestamp(); 
     this.isRunning = true; 
    } 
} 



public static long GetTimestamp() 
{ 
    if (IsHighResolution) 
    { 
     long num = 0L; 
     SafeNativeMethods.QueryPerformanceCounter(out num); 
     return num; 
    } 
    return DateTime.UtcNow.Ticks; 
} 
+0

Vâng, đúng vậy. Nhưng rất không chính xác. Xem câu trả lời của tôi. –

3

Thực ra, sau một chút thử nghiệm, nó thực hiện xuất hiện để đếm, nhưng nó đã được tắt. Đây là những gì tôi đã làm:

  1. Wrote mã dưới đây
  2. Ran nó, và ngay lập tức đưa máy tính của tôi trong Ngủ chế độ
  3. Chờ đợi 10 giây và đưa máy tính của tôi lại lên

Kết quả là thời gian gây sốc Elapsed trong hơn 4 phút. Đường tắt. Vì vậy, tôi sẽ không sử dụng điều này như bất kỳ loại điểm chuẩn nào.

Dưới đây là đoạn code tôi sử dụng:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 

namespace TestingCode 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Stopwatch testing = new Stopwatch(); 

      testing.Start(); 

      Console.WriteLine("Press any key to stop timer"); 
      Console.ReadKey(); 

      testing.Stop(); 

      Console.WriteLine("Elapsed: {0}", testing.Elapsed); 

      Console.WriteLine("Done!!"); 
      Console.ReadKey(); 
     } 
    } 
} 
Các vấn đề liên quan