2012-06-21 44 views
7

Có cách nào để tìm kích thước mã và thời gian thực thi của nó để tôi có thể so sánh hai mã và quyết định mã nào tốt hơn không?C# Kích thước mã và thời gian thực thi Mã

Ví dụ cho phép nói rằng tôi muốn tìm ra kích thước và thời gian thực hiện điều này

Mã 1

for(int i=0; i<5; i++) 
{ 
    sum+=1; 
} 

Bộ luật này 2

for(int i=0; i<=4; i++) 
{ 
    sum = sum + 1; 
} 

để quyết định là tốt hơn (bây giờ tôi không quan tâm đến ví dụ này). Ví dụ kết quả sẽ là:

Code 1: 
Size: ? KB 
Time: ? ms 

Code 2: 
Size: ? KB 
Time: ? ms 
+1

Tại sao không chỉ sử dụng 'sum ++'? Nó sử dụng 'inc' thay vì' add'. Và 'inc' nói chung là nhanh hơn ... –

+0

* (Sau khi dịch của MSIL) –

+0

@ColeJohnson Tôi đoán rằng đó là loại tối ưu hóa mà một trình biên dịch/JITter đang làm cho bạn – Servy

Trả lời

15

Bạn có thể sử dụng ANTS Profiler http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/ (sản phẩm phải trả tiền nhưng có phiên bản dùng thử) hoặc một số sản phẩm Profiler khác (ANTS, vTune, OptimizeIt, DevPartner, YourKit, dotTrace) trên thị trường.

Bạn cũng có thể tự mình chèn các hàm bằng cách thiết lập một số kiểm tra đơn vị thực hiện 2 chức năng đó bằng cách sử dụng thiết bị StopWatch thủ công để so sánh thời gian thực hiện (nhanh hơn và ít tốn kém hơn). Kiểm tra đơn vị cũng sẽ cho phép đảm bảo rằng bạn không có bất kỳ hồi quy nào về hiệu suất nếu bạn cần thay đổi triển khai sau này. http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

var stopWatch = new Stopwatch(); 
    stopWatch.Start(); 
    var result = CallFunction(); 
    stopWatch.Stop(); 
    var executionTime = stopWatch.Elapsed; 
+0

Cảm ơn bạn đã nhập mã và liệt kê tất cả các sản phẩm – a1204773

+0

Tôi có thể đề nghị sử dụng ['Stopwatch.StartNew()'] (http://msdn.microsoft.com /en-us/library/system.diagnostics.stopwatch.startnew.aspx)? – Adam

2

Bạn có thể sử dụng lớp FileInfo (Xem Length tài sản) để xác định kích thước của một tập tin.

Bạn có thể sử dụng lớp Stopwatch để xác định phải mất bao lâu để chạy chương trình.

+0

Cảm ơn bạn đã đồng hồ bấm giờ nhưng FileInfo không phải là những gì tôi cần – a1204773

3

Để đo thời gian thực hiện, bạn nên sử dụng StopWatch - bạn sẽ cần phải chạy nhiều lần lặp nhiều lần và trung bình họ ra nếu bạn muốn có một chuẩn thích hợp.

var sw = new StopWatch(); 
sw.Start(); 

// do a million iterations 

sw.Stop(); 

var time = sw.Elapsed; 

Đối với kích thước bộ nhớ - bạn có thể sử dụng một trong nhiều profilers bộ nhớ có sẵn - ANTS memory profiler, dotTrace hai lựa chọn thương mại.

+0

Cảm ơn bạn đã viết mã và cho các sản phẩm – a1204773

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