2011-10-20 84 views
5

Làm cách nào để in trong hộp văn bản hoặc ở đầu ra thời gian mà chương trình chi tiêu đang chạy?Thời gian chạy chương trình đang chạy

Tôi muốn nó được hiển thị trong vòng lặp, để nhận được thời gian cần thiết cho mỗi vòng lặp.

+1

Hãy xem bài viết này: [Thời gian C# chức năng hoạt động với lớp Stopwatch] (http://www.dijksterhuis.org/timing-function-performance-stopwatch-class/) – R0MANARMY

+0

Vâng, bạn thiết lập bộ hẹn giờ, chạy chương trình, ngừng bộ hẹn giờ và nhập thời gian vào hộp văn bản. Dễ dàng! Để nghiêm túc hơn, hãy thử http://msdn.microsoft.com/en-us/library/system.datetime.now.aspx và '.Subtract()' – alf

Trả lời

12

Bạn có thể thử:

DateTime dt = DateTime.Now; 
for (.......) 
{ 
} 
TimeSpan ts = DateTime.Now - dt; 
textbox1.Text = ts.TotalMilliseconds.ToString(); 

hoặc (theo MSDN) nếu bạn cần độ phân giải tốt hơn

Stopwatch stopWatch = new Stopwatch(); 
stopWatch.Start(); 
for (.......) 
{ 
} 
stopWatch.Stop(); 
textbox1.Text = stopWatch.ElapsedMilliseconds.ToString(); 
+3

[MSDN] (http://msdn.microsoft.com/en-us/library/system.datetime. now.aspx) tài liệu hướng dẫn cụ thể ** chống lại ** bằng cách sử dụng lớp DateTime cho các mục đích đo điểm chuẩn. – R0MANARMY

+0

@ R0MANARMY: vâng, bạn nói đúng. Tôi đã chỉnh sửa bài đăng của mình bao gồm cả hai giải pháp. Cảm ơn – Marco

+0

Bạn có thể sử dụng 'stopWatch.ElapsedMilliseconds' trực tiếp và loại bỏ các chuyển đổi TimeSpan trung gian – sll

10
var watch = System.Diagnostics.Stopwatch.StartNew(); 

for() 
{ 
// .. 
} 

watch.Stop(); 

// Format 00:00:02.0001008 
string elapsed = watch.Elapsed.ToString();  

// Milliseconds like 2000 for 2 seconds 
string elapsedMs = watch.ElapsedMilliseconds.ToString(); 

System.Diagnostics.Debug.WriteLine(elapsed); 
+0

+1 cho bạn, bởi vì câu trả lời của bạn là câu hỏi đầu tiên và đó là chính xác!! – Marco

0

giống như sau:?

DateTime start = DateTime.UtcNow; 

//... processing ... 

DateTime end = DateTime.UtcNow; 

Syste.Diagnostics.Debug.WriteLine((end - start).ToString()); 
+1

[MSDN] (http://msdn.microsoft.com/en-us/library/system.datetime.now.aspx) tài liệu hướng dẫn cụ thể ** chống lại ** sử dụng lớp DateTime cho mục đích đo điểm chuẩn. – R0MANARMY

+1

chắc chắn tôi biết có bộ hẹn giờ tốt hơn, điều này là tốt nếu bạn muốn xem giây hoặc phút ... :) –

0

Bạn có thể lưu trữ các DateTime hiện khi khởi động ứng dụng, sau đó tạo ra một bộ đếm thời gian bắn mỗi giây. Khi nó bắn bạn nhận được DateTime hiện tại, trừ chúng để có được TimeSpan và sử dụng nó để điền vào hộp văn bản của bạn.

+0

Sẽ không phải chỉ đếm giây? – R0MANARMY

+0

Bạn cập nhật hộp nhập mỗi giây, không đo thời gian. – TJHeuvel

0

Thêm hai dòng này - Giữa vòng lặp For của bạn hoặc giữa mã mà bạn muốn kiểm tra tốc độ functinality.

Debug.WriteLine(DateTime.Now.ToLongTimeString()); 

    --your code 

Debug.WriteLine(DateTime.Now.ToLongTimeString()); 
+0

Điều này sẽ không chính xác vì bạn sẽ đo không chỉ mất bao lâu mã thực thi mà mất bao lâu để biến DateTime thành chuỗi + chạy mã. Cấp nếu mã chạy trong một thứ gì đó theo thứ tự các phút một vài phần nghìn giây sẽ không đáng kể, nhưng để chạy ngắn hơn, nó có thể tạo ra sự khác biệt. – R0MANARMY

+0

@Romanarmy, bạn là chính xác, nếu nó là loại thời gian quan trọng Dự án hạt nhân .. Và như bạn biết hầu hết các dự án chúng tôi phát triển hàng ngày là các ứng dụng Web hạt nhân. –

+0

không, nhưng chúng tôi đã viết tất cả các mã thực thi trong một vòng lặp chặt chẽ, và làm cho nó kém hiệu quả hơn có nghĩa là trải nghiệm người dùng kém bởi vì giao diện người dùng bị khóa một giây mỗi lần người dùng nhấp vào một nút. – R0MANARMY

Các vấn đề liên quan