2009-10-28 35 views
5

Chúng tôi có một ứng dụng được trộn lẫn .NET 2.0 và native C++. Trong thử nghiệm của chúng tôi, chúng tôi có một chế độ có thể tự động lặp qua một tập hợp các dự án. Một dự án mở ra, chạy, đóng, lặp lại. Mỗi bước trong số này đòi hỏi phải tạo/hủy các cửa sổ (winforms là chính xác). Gần đây chúng tôi đã trải qua một số hành vi kỳ lạ trong hoạt động. Sau khi chạy trong vài giờ, phần mở và đóng sẽ chậm lại (chặn sợi gui và hiển thị một nửa màn hình được vẽ vv). Bây giờ nó sẽ dễ dàng chock này lên đến một rò rỉ tài nguyên ... nhưng chúng tôi đang theo dõi xử lý và bộ nhớ, và trong khi bộ nhớ phát triển một chút không có gì để chỉ ra mức độ vấn đề này. Tay cầm ổn định. Vì vậy, có thể xử lý sự kiện lơ lửng ... vẫn cần phải điều tra điều đó. Nhưng kicker, điều làm tôi bối rối, là việc tắt ứng dụng và khởi động lại nó không mang lại hiệu suất ban đầu. Nó vẫn còn chậm cho đến khi tôi khởi động lại hệ điều hành (win XP) và sau đó hiệu suất bắt đầu trở nên linh hoạt trở lại. Điều này thực sự làm tôi bối rối khi tôi cho rằng việc tắt ứng dụng sẽ đòi lại tất cả các tài nguyên. Có suy nghĩ gì không?Phân tích hiệu suất lẻ trong ứng dụng

+0

Bạn nên chạy ứng dụng trong profiler trước và sau khi chậm lại và so sánh hai kết quả. Tất cả mọi thứ mà gậy ra là đáng kể khác nhau là giá trị điều tra. Có rất nhiều hồ sơ miễn phí, hoặc tốt, hoặc miễn phí và tốt xung quanh, chỉ cần thử một vài và chọn một trong đó bạn cảm thấy thoải mái. – Rom

Trả lời

0

Chúng tôi đã bị rò rỉ các lớp cửa sổ

1

Âm thanh như rò rỉ xử lý GDI có thể xảy ra. GDI objects không được chọn bởi Garbage Collector.

. Bộ nhớ .NET Profiler (http://memprofiler.com/) thực hiện tốt công việc theo dõi chúng (có phiên bản dùng thử 14 ngày).

Bạn đã thấy những:

+0

Tôi sẽ sử dụng Second Profiler Memory. Nó cho phép bạn chụp nhanh và so sánh chúng - vì vậy bạn có thể chụp nhanh trên một lần lặp, lấy ảnh chụp khác trên bản tiếp theo và phân biệt chúng - bạn có thể thấy chính xác những gì đang phát triển giữa các lần lặp lại ứng dụng của bạn. – stusmith

+0

Tôi có .NET Memory Profiler và sẽ thử điều đó - nhưng thực tế là việc khởi động lại ứng dụng (không khởi động lại) không khắc phục được vấn đề sẽ không được giải thích bởi bất cứ điều gì trong quá trình tăng trưởng. – user109078

+0

Điều đó không đúng đối với một số tài nguyên hệ thống hạn chế nhất định như xử lý GDI .... –

0

Bạn giả định rằng đây là sự rò rỉ tài nguyên (không phải là phỏng đoán xấu), nhưng có thể đó là điều gì đó khác.

Bạn đã thử sử dụng trình lược tả hiệu suất chưa?

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