2011-10-11 27 views
9

Tôi cần một cách đơn giản (và nhỏ gọn nếu có thể) để thực hiện một khối C# trong khi đếm thời gian. Một cái gì đó tương tự như C++ mã này:Làm thế nào để dễ dàng thời gian một khối mã C#?

elapsed = time_call([&] 
    { 
     for_each (a.begin(), a.end(), [&](int n) { 
     results1.push_back(make_tuple(n, fibonacci(n))); 
     }); 
    }); 

nơi time_call là:

// Calls the provided work function and returns the number of milliseconds 
// that it takes to call that function. 
template <class Function> 
__int64 time_call(Function&& f) 
{ 
    __int64 begin = GetTickCount(); 
    f(); 
    return GetTickCount() - begin; 
} 

tôi biết cách đồng hồ bấm giờ ... bất cứ điều gì nhỏ gọn hơn?

+3

Có gì sai với 'Stopwatch'? – SLaks

+1

Cách đồng hồ bấm giờ mất khoảng 3 dòng mã, bạn muốn nó như thế nào? – harold

Trả lời

13
TimeSpan TimeAction(Action blockingAction) 
{ 
    Stopwatch stopWatch = System.Diagnostics.Stopwatch.StartNew(); 
    blockingAction(); 
    stopWatch.Stop(); 
    return stopWatch.Elapsed; 
} 

Cách sử dụng:

var elapsed = TimeAction(() => 
    { 
     //Code to time 
    }); 

Dựa trên mẫu mã của bạn (và sử dụng GetTickCount), bạn có thể muốn trở ElapsedTicks thay vì Elapsed.

+1

Được cung cấp rõ ràng là 'hành động' đang chặn (tức là không đồng bộ hóa). – Joey

+0

System.Diagnostics không được "sử dụng" theo mặc định. Và nó sẽ là 'System.Diagnostics.Stopwatch.StartNew()', không phải 'mới StopWatch.StartNew()'. – Philip

+0

@Joey: Đúng, tên thông số được cập nhật để làm rõ hơn. –

0

Tôi không biết cách đồng hồ bấm giờ, nhưng C# cũng có lambdas, vì vậy cần phải dễ dàng thực hiện điều gì đó tương tự như time_call().

6
public double TimeCall(Action actionToExecute) 
{ 
    double elapsed = 0; 

    if (actionToExecute != null) 
    { 
     var stopwatch = Stopwatch.StartNew(); 
     actionToExecute.Invoke(); 
     elapsed = stopwatch.ElapsedMilliseconds; 
    } 

    return elapsed; 
} 

Làm thế nào để sử dụng:

var elapsed = TimeCall(() => { foreach(...) }); 
Các vấn đề liên quan