2010-04-23 28 views
9

Vì vậy, tôi đang xây dựng một ứng dụng WPF và đã triển khai thử nghiệm ngày hôm nay và thấy rằng nó hoạt động kém. Tôi đã rất ngạc nhiên, vì chúng tôi thực sự không làm nhiều việc theo cách hiệu ứng hình ảnh hoặc hoạt ảnh.WPF: Cải thiện hiệu suất để chạy trên các máy tính cũ hơn

Tôi đã triển khai trên hai máy: nhanh nhất và chậm nhất cần chạy ứng dụng (máy tính chậm nhất có Intel Celeron 1.80GHz với RAM 2GB). Ứng dụng chạy khá tốt trên máy nhanh hơn, nhưng bị thay đổi trên máy chậm hơn. Và khi tôi nói "choppy", tôi có nghĩa là con trỏ nhảy ngay cả khi chỉ truyền nó qua bất kỳ cửa sổ đang mở nào của ứng dụng đã tập trung.

Tôi đã mở cửa sổ Trình quản lý tác vụ và có thể thấy rằng mức sử dụng CPU tăng lên bất cứ khi nào ứng dụng tập trung và con trỏ di chuyển qua nó. Nếu tôi đã tập trung vào một cái khác (ví dụ: Excel), mức sử dụng CPU sẽ giảm xuống sau một giây. Điều này xảy ra trên cả hai máy, nhưng sự xáo trộn chỉ đáng chú ý trên máy chậm hơn. Tôi đã rất hạn chế thời gian để tinker trên các máy triển khai, do đó, đã không làm rất nhiều thử nghiệm chi tiết.

Ứng dụng chạy tốt trên máy phát triển của tôi, nhưng tôi cũng thấy CPU tăng lên đến 10% ở đó, chỉ cần chạy con trỏ qua cửa sổ.

Tôi đã tải xuống công cụ hiệu suất WPF từ MS và đã được tinkering với nó (trên máy dev của tôi). Các tài liệu nói điều này về "Frame Rate" số liệu trong công cụ đục:

Đối với các ứng dụng mà không cần hình ảnh động, giá trị này nên gần 0.

các ứng dụng không làm bất kỳ hình ảnh động nặng, nhưng tốc độ khung hình vẫn gần 50 khi con trỏ ở trên bất kỳ cửa sổ nào. Các màn hình tôi đã thử nghiệm có tiêu đề cột trong một lưới "đánh dấu" và các nút thay đổi màu sắc và giao diện khi cuộn qua. Ngay cả việc di chuyển chuột trên các vùng trống của cửa sổ cũng làm cho tốc độ khung hình và mức sử dụng CPU giống nhau (dường như không liên quan đến các hoạt ảnh nhỏ này).

(Ngoài ra, tôi không thể tìm ra cách nhận bất kỳ thứ gì ngoài hai công cụ mặc định - Perforator và Visual Profiler - được cài đặt vào công cụ hiệu suất WPF. Đó có thể là câu hỏi riêng).

Tôi cũng có công cụ lược tả của Redgate, nhưng tôi không chắc liệu công cụ có thể làm sáng tỏ hiệu suất hiển thị hay không.

Vì vậy, tôi nhận ra đây không phải là điều dễ dàng để khắc phục sự cố mà không có chi tiết cụ thể hoặc mã mẫu (mà tôi không thể đăng). Câu hỏi của tôi là:

  • một số điều tổng quát để tìm cho (hoặc tránh) trong mã để cải thiện hiệu suất là gì?
  • Tôi có thể thực hiện các bước nào bằng cách sử dụng công cụ hiệu suất WPF để thu hẹp sự cố ?
  • Thông số kỹ thuật của PC được liệt kê ở trên (Intel Celeron 1.80GHz với RAM 2GB) có quá chậm để chạy ngay cả ứng dụng WPF vani không?

Trả lời

3

Bạn có áp dụng bất kỳ BitmapEffect -s nào cho các yếu tố giao diện người dùng của mình không? Chúng không được xử lý bởi GPU, vì vậy CPU sẽ xử lý chúng. Nếu không được sử dụng đúng cách (ví dụ: có một OuterGlowBitmapEffect được áp dụng cho một phần tử phức tạp lớn), chúng có thể có tác động khủng khiếp đến hiệu năng.

Ngoài ra, bạn vẫn có thể muốn thử định hình ứng dụng của mình bằng trình thu thập hiệu suất. Chỉ để xem nếu nó không phải là mã của bạn gây ra điều này.

0

Điều này là không bình thường đối với WPF - Tôi nghi ngờ một trong những nhà phát triển của bạn đã viết mã chạy bộ hẹn giờ ở chế độ nền (hoặc có khả năng mô tả của bạn, trình xử lý di chuyển chuột). .

Nếu bạn có trình thu thập thông tin hiệu suất ANTS (nó thực sự tốt), tôi sẽ chạy nó trên ứng dụng của bạn và tái tạo sự cố.

Khi bạn đã thực hiện điều đó, ANTS sẽ cho bạn biết khá nhanh vấn đề là gì. Nếu ANTS không tiết lộ bất cứ điều gì, và cho bạn thấy rằng trên thực tế không có mã nào của bạn đang chạy trong thời gian này, thì tôi sẽ nghi ngờ các trình điều khiển cạc đồ họa lỗi.

Bạn có thể kiểm tra điều này bằng cách vô hiệu hóa tăng tốc phần cứng bằng cách thiết lập các khóa registry sau đây, và cố gắng một lần nữa:

HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics\DisableHWAcceleration to 1 

Lưu ý: giá trị DisableHWAcceleration phải là một DWORD

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