2012-01-17 34 views
31

Tôi hoàn toàn bối rối giữa những điều này 4. Sự khác nhau giữa ElapsedMilliseconds (dài), ElapsedTicks (long), Elapsed.TotalMilliseconds (double) và Elapsed.Milliseconds (int) là gì?Sự khác nhau giữa ElapsedTicks, ElapsedMilliseconds, Elapsed.Milliseconds và Elapsed.TotalMilliseconds? (C#)

Tôi có một chức năng

{ 
     Stopwatch sw = new Stopwatch(); 

     sw.Start(); 
     MyTimeConsumingAction(); 
     sw.Stop(); 

     sw.//what? 
    } 

Làm thế nào để có được thời gian chính xác được tiêu thụ bởi quá trình chạy dài của tôi từ tài sản trôi qua của đối tượng Đồng hồ bấm giờ trong mili giây?

Edit: Tôi cố gắng tài liệu MSDN nhưng nó không phải là bất cứ điều gì chi tiết có ..

+0

Cũng thấy điều này http://stackoverflow.com/questions/5793791/what-are-timer-ticks -e-unit-used-by-stopwatch-elapsedticks – nawfal

Trả lời

43

Elapsed.TotalMilliseconds (double) trả về tổng số toàn bộ và mili giây phân đoạn trôi qua kể từ khi thành lập

ví dụ một đồng hồ bấm giờ dừng lại ở 1.23456 giây sẽ trả lại 1234,56 trong tài sản này. Xem TimeSpan.TotalMilliseconds trên MSDN

Elapsed.Milliseconds (int) trả về số toàn mili giây trong lần thứ hai hiện tại

ví dụ một đồng hồ bấm giờ ở 1.234 giây sẽ trả lại 234 trong tài sản này. Xem TimeSpan.ElapsedMilliseconds

ElapsedTicks (long) trả về các dấu kể từ khi bắt đầu đồng hồ bấm giờ.

Trong ngữ cảnh của câu hỏi gốc, liên quan đến lớp Đồng hồ bấm giờ, ElapsedTicks là số lần tích tắc đã trôi qua. Ticks xảy ra với tỷ lệ Stopwatch.Frequency, vì vậy, để tính số giây trôi qua, hãy tính: numSeconds = stopwatch.ElapsedTicks/Stopwatch.Frequency.

Dấu câu trả lời cũ được xác định là số lượng khoảng 100 nano giây, đó là chính xác trong ngữ cảnh của lớp DateTime, nhưng không chính xác trong ngữ cảnh của lớp Đồng hồ bấm giờ. Xem Stopwatch.ElapsedTicks trên MSDN.

ElapsedMilliseconds trả về một số được làm tròn đến gần nhất mili giây, vì vậy điều này có thể thiếu chính xác Elapsed.TotalMilliseconds thuộc tính có thể cung cấp.

Elapsed.TotalMilliseconds là giá trị gấp đôi có thể trả về thời gian thực hiện thành một phần nghìn giây trong khi ElapsedMilliseconds là Int64. ví dụ. đồng hồ bấm giờ ở mức 0,0007 mili giây sẽ trả về 0 hoặc 1234,56 mili giây sẽ trả lại 1234 trong thuộc tính này. Vì vậy, đối với độ chính xác luôn sử dụng Elapsed.TotalMilliseconds.

Xem Stopwatch.ElapsedMilliseconds on MSDN để làm rõ.

Trân trọng,

+1

hãy chấp nhận chỉnh sửa của tôi, để nó rõ ràng bây giờ – nawfal

+1

Với 'sw' như trong câu hỏi, hãy lưu ý rằng:' sw.ElapsedTicks' cung cấp số lượng bọ ve trong phần cứng đơn vị phụ thuộc 'Stopwatch.Frequency', giống như bạn nói. Tuy nhiên, 'sw.Elapsed.Ticks' (lưu ý thêm dấu chấm !!) cho số lượng được tính của các ve trong đơn vị 100 nano giây được ngụ ý bởi hằng số' TimeSpan.TicksPerSecond' có giá trị là hằng số '10.000.000'. –

1

ElapsedTimeSpan.Nếu bạn muốn hiển thị thời gian, sau đó chỉ cần Elapsed.ToString() nên làm điều đó

2

trong một lời giải thích ngắn từ msdn:

ElapsedMilliseconds 

Khách sạn này đại diện cho thời gian trôi qua làm tròn xuống đến giá trị mili giây toàn bộ gần nhất. Để có các phép đo chính xác cao hơn, hãy sử dụng thuộc tính Elapsed hoặc ElapsedTicks.

ElapsedTicks 

Thuộc tính này thể hiện số lượng dấu chấm đã qua trong cơ chế hẹn giờ cơ bản. Dấu tích là đơn vị thời gian nhỏ nhất mà đồng hồ bấm giờ có thể đo lường. Sử dụng trường Tần số để chuyển đổi giá trị ElapsedTicks thành một số giây.

Elapsed 

Sử dụng thuộc tính Đã qua để truy xuất giá trị thời gian đã trôi qua bằng các phương pháp và thuộc tính TimeSpan. Ví dụ, bạn có thể định dạng thể hiện TimeSpan được trả về thành một biểu diễn văn bản hoặc chuyển nó tới một lớp khác yêu cầu tham số TimeSpan.

6

Phản ánh lớp Stopwatch tiết lộ rằng ElapsedMilliseconds là đã qua ve chuyển đổi (và làm tròn) để mili giây:

public TimeSpan Elapsed 
{ 
    get 
    { 
    return new TimeSpan(this.GetElapsedDateTimeTicks()); 
    } 
} 

public long ElapsedMilliseconds 
{ 
    get 
    { 
    return this.GetElapsedDateTimeTicks()/10000L; 
    } 
}