2009-10-11 11 views

Trả lời

23

Tôi nghĩ rằng lớp học Stopwatch là những gì bạn đang tìm kiếm.

+0

+1, Đối với thời gian (so với nhận được thời gian tuyệt đối), Đồng hồ bấm giờ là nó. – orip

+2

Đồng hồ bấm giờ chắc chắn là cách tốt nhất để thời gian mọi thứ trong BCL, nó chỉ không chính xác đến nano giây. – overstood

+3

@overstood: Vâng, độ chính xác không giảm xuống còn nano giây, giống như phương pháp nanoTime. :) – Guffa

1

DateTime.Now sẽ cung cấp cho bạn thời gian hiện tại tính bằng mili giây, nhưng thời gian chính xác đến nano giây là khá không thực tế, ít nhất là trong Windows.

+1

Tôi tin rằng độ chính xác của DateTime.Now là ~ 15 hoặc 20 mili giây. Nó có độ chính xác cao hơn độ chính xác. – snarf

1

điều gần nhất mà tôi có thể tìm thấy là phương thức DateTime.ToFileTime(). bạn có thể gọi đây là trên một thể hiện của một DateTime như vậy:

long starttime = DateTime.Now.ToFileTime() 

Phương pháp này trả về một Time Windows File:

Một Windows thời gian tập tin là một giá trị 64-bit đại diện cho số của 100 khoảng thời gian -nanosecond đã trôi qua kể từ 12:00 nửa đêm, ngày 1 tháng 1, 1601 AD (CE) Giờ Quốc tế Phối hợp (UTC).

bạn có thể có ít nhất thời gian trong khoảng thời gian 100 giây với nó.

src: http://msdn.microsoft.com/en-us/library/system.datetime.tofiletime.aspx

+0

Điều này chỉ mang lại cho bạn độ chính xác 100 ns cho thời gian cập nhật bộ đếm thời gian của cửa sổ cuối cùng, điều này xảy ra sau mỗi 15 đến 16 ms – overstood

+2

ok, chỉ vì tò mò mà thông tin đến từ đâu? –

-1

Tôi nghĩ rằng bạn đang đi để đạt các giới hạn cứng của hệ điều hành nếu bạn đang thời gian trong nano giây. Dưới đây là một bài viết tốt về chủ đề này:

http://www.lochan.org/2005/keith-cl/useful/win32time.html

Trong khi Windows sẽ vui vẻ trở lại 100 độ chính xác nano giây, đồng hồ chỉ đảm bảo để cập nhật một lần mỗi 15,6 mili giây hoặc lâu hơn. Vì vậy, Windows có hiệu quả trả về thời gian mà các bản cập nhật đó xảy ra với độ chính xác 100 nano giây. Để có độ chính xác cao hơn, bạn có thể cần phải chuẩn bị để viết C hoặc assembly và chạy và nhúng OS.

1

DateTime.Now.Ticks

Tôi đã cố gắng tìm câu trả lời cho này để chạy một số thử nghiệm hiệu suất.

DateTime startTime = DateTime.Now; 
generatorEntity.PopulateValueList(); 
TimeSpan elapsedTime = DateTime.Now - startTime; 
Console.WriteLine("Completed! time(ticks) - " + elapsedTime.Ticks); 
2

Nếu bạn muốn có một dấu thời gian để được so sánh giữa các quá trình khác nhau, ngôn ngữ khác nhau (Java, C, C#), dưới GNU/Linux và Windows (Bảy ít nhất):

Java:

java.lang.System.nanoTime(); 

C GNU/Linux:

static int64_t hpms_nano() { 
    struct timespec t; 
    clock_gettime(CLOCK_MONOTONIC, &t); 
    int64_t nano = t.tv_sec; 
    nano *= 1000; 
    nano *= 1000; 
    nano *= 1000; 
    nano += t.tv_nsec; 
    return nano; 
} 

C Windows:

static int64_t hpms_nano() { 
    static LARGE_INTEGER ticksPerSecond; 
    if(ticksPerSecond.QuadPart == 0) { 
     QueryPerformanceFrequency(&ticksPerSecond); 
    } 
    LARGE_INTEGER ticks; 
    QueryPerformanceCounter(&ticks); 
    uint64_t nano = (1000*1000*10UL * ticks.QuadPart)/ticksPerSecond.QuadPart; 
    nano *= 100UL; 
    return nano; 
} 

C#:

private static long nanoTime() { 
    long nano = 10000L * Stopwatch.GetTimestamp(); 
    nano /= TimeSpan.TicksPerMillisecond; 
    nano *= 100L; 
    return nano; 
}