2011-02-14 36 views
6

Tôi đã có một chút câu hỏi hóc búa ở đây. Tôi đã cố gắng để tăng tốc độ một chức năng nhất định, bây giờ khi tôi chạy ứng dụng của tôi phải mất ~ 16-17 giây để chạy chức năng này.Tại sao mã của tôi nhanh hơn khi chạy với Phân tích hiệu suất?

Bây giờ, nếu tôi chạy cùng với Phân tích hiệu suất chạy dọc theo nó trong VS2010, để tìm các phần chậm hơn, mã sẽ thực thi sau ~ 6-7 giây. Bây giờ, nếu mã của tôi đã chạy nhanh, điều đó sẽ hoàn toàn có thể chấp nhận được đối với ứng dụng.

Tôi đã thử chạy mã (không phân tích perf) thông qua cả hồ sơ gỡ lỗi và bản phát hành, với ít hoặc không có sự khác biệt.

Bất kỳ ai có ý tưởng gì có thể xảy ra ở đây?

Rất ít lưu ý: hàm được đề cập sử dụng khá nhiều LINQ to SQL và phân tích hiệu suất im sử dụng là Lấy mẫu CPU.

+0

Heisenbug. Bạn có nhận được 16-17 giây tương tự nếu bạn biên dịch trong chế độ phát hành (so với gỡ lỗi) không? – Robaticus

+0

Bạn có chạy chương trình bên ngoài VS không? Đơn giản chỉ cần chạy một chương trình trong VS với debugger đính kèm vô hiệu hóa rất nhiều jitter tối ưu hóa. – CodesInChaos

+0

Robaticus, vâng (như đã nêu). CodeInChaos - Tôi nhận thấy một sự khác biệt lớn giữa bên ngoài và bên trong VS, vâng, nhưng tôi đã mong đợi điều đó. –

Trả lời

4

Tôi tin bạn nên tập trung vào các phần chậm nhất của mã và tối ưu hóa chúng nếu bạn xác định những gì mất nhiều thời gian hơn các phần khác, không quan tâm đến thời lượng tuyệt đối trong vài giây mà chỉ nghĩ tương đối.

Thậm chí nếu bạn thấy toàn bộ ứng dụng được thực hiện trong 7 giây, nếu có các phương pháp mất 40% toàn bộ thời gian này hãy thử tối ưu hóa chúng thì bạn chắc chắn sẽ kiếm được lợi nhuận ngay cả khi chưa bật Phân tích hiệu suất và tổng số thời gian thực hiện sẽ giảm nhiều hơn nếu ban đầu là khoảng 17 giây.

+0

+1 cho lời khuyên, Bạn có thể dành thời gian tối ưu hóa hơn là nghiên cứu lý do tại sao chênh lệch múi giờ. –

+0

Vâng vâng, nhưng vấn đề là nó hoàn toàn được tối ưu hóa "bên trong" phân tích nhưng không phải bên ngoài. –

1

Bạn có thấy rất nhiều dll đang được tải khi bạn nhập hàm vào trường hợp phân tích không hoạt động không? Tôi tự hỏi liệu việc nhập hàm này có gây ra rất nhiều dll để tải không, trong trường hợp phân tích hiệu suất đã được tải trước đó.

+0

Không thực sự, không - hoặc ít nhất không có gì bất thường –

+0

Thêm dấu vết cho hàm của bạn với dấu thời gian và cố gắng thu hẹp nơi diễn ra sự chậm lại, thời gian từ 16-17 giây, kiểm tra thời gian viết trước các chức năng gọi, và sau đó ngay khi bạn nhập, được tự do ngay bây giờ, bởi vì nó có vẻ như bạn sẽ phải làm phân tích hiệu suất của bạn theo cách cũ thời. –

+0

Vâng, tôi đã tìm ra được vấn đề - và cố định nó, nhưng câu hỏi đặt ra là "tại sao" vấn đề xảy ra thay vì cách giải quyết vấn đề như vậy –

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