Thật ngạc nhiên khi sử dụng PLINQ không mang lại lợi ích cho một trường hợp thử nghiệm nhỏ mà tôi đã tạo; trên thực tế, nó thậm chí còn tồi tệ hơn LINQ thông thường.PLINQ Thực hiện tồi tệ hơn thông thường LINQ
Dưới đây là các mã kiểm tra:
int repeatedCount = 10000000;
private void button1_Click(object sender, EventArgs e)
{
var currTime = DateTime.Now;
var strList = Enumerable.Repeat(10, repeatedCount);
var result = strList.AsParallel().Sum();
var currTime2 = DateTime.Now;
textBox1.Text = (currTime2.Ticks-currTime.Ticks).ToString();
}
private void button2_Click(object sender, EventArgs e)
{
var currTime = DateTime.Now;
var strList = Enumerable.Repeat(10, repeatedCount);
var result = strList.Sum();
var currTime2 = DateTime.Now;
textBox2.Text = (currTime2.Ticks - currTime.Ticks).ToString();
}
Kết quả?
textbox1: 3437500
textbox2: 781250
Vì vậy, LINQ mất ít thời gian hơn PLINQ để hoàn tất một hoạt động tương tự!
Tôi đang làm gì sai? Hoặc là có một twist mà tôi không biết về?
Chỉnh sửa: Tôi đã cập nhật mã của mình để sử dụng đồng hồ bấm giờ, tuy nhiên, hành vi tương tự vẫn tồn tại. Để giảm hiệu quả của JIT, tôi thực sự đã thử một vài lần bằng cách nhấp vào cả hai button1
và button2
và không theo thứ tự cụ thể. Mặc dù thời gian tôi nhận được có thể khác, nhưng hành vi định tính vẫn còn: PLINQ thực sự chậm hơn trong trường hợp này.
Mẹo: Sử dụng lớp 'Đồng hồ bấm giờ' để đo hiệu suất. Sẽ chính xác hơn khi đo thời gian hơn 'DateTime.Now'. – Greg
@Anthony Pegram, như thế nào? Tôi có thể dễ dàng thấy mọi loại sẽ như thế nào. – CaffGeek
Bạn có thể cho chúng tôi biết bạn đang chạy phần cứng nào không? –