Mã số:Lý do của các khoảng thời gian khác nhau của các khối mã thực thi như thế nào?
internal class Program
{
private static void Main(string[] args)
{
const int iterCount = 999999999;
var sum1 = 0;
var sum2 = 0;
using (new Dis())
{
var sw = DateTime.Now;
for (var i = 0; i < iterCount; i++)
sum1 += i;
Console.WriteLine(sum1);
Console.WriteLine(DateTime.Now - sw);
}
using (new Dis())
{
var sw = DateTime.Now;
for (var i = 0; i < iterCount; i++)
sum2 += i;
Console.WriteLine(sum2);
Console.WriteLine(DateTime.Now - sw);
}
Console.ReadLine();
}
private class Dis : IDisposable
{
public void Dispose(){}
}
}
Hai khối giống hệt nhau trong cách sử dụng giống hệt nhau.
Output:
2051657985
00:00:00.3690996
2051657985
00:00:02.2640266
khối thứ hai mất 2.2 giây! Nhưng nếu để loại bỏ việc sử dụng, thời lượng trở nên giống nhau (~ 0.3s, như lần đầu tiên). Tôi đã thử với .net framework 4.5 và .net core 1.1, trong bản phát hành, kết quả giống nhau.
Ai đó có thể giải thích hành vi đó không?
Có thể thử với biến thay vì 'Console.WriteLine'?Đó có thể là vấn đề. – ispiro
Khi tôi chạy mã của bạn trong linqpad nó mang lại cho tôi ~ 2,5 giây cho cả hai khối mã. Khi chạy trên ideone nó cung cấp cho ~ 0,3 giây cho cả hai khối: https://ideone.com/ReOpaH. – Chris
Đồng thời sử dụng đồng hồ bấm giờ thích hợp. Bạn gọi sw biến datetime của bạn có nghĩa là bạn đang muốn sử dụng một đồng hồ bấm giờ nhưng sau đó bạn không sử dụng một. – Chris