2011-11-25 12 views
7

Tôi profiling một C# .NET WinForms ứng dụng và tôi đã nhận thấy rằng nó tạo ra hàng triệu lỗi trang mềm và tiếp tục tăng trong công việc ...Làm cách nào để tránh số lượng lớn các lỗi trang mềm do ứng dụng C# .NET của tôi tạo ra?

Tôi biết rằng trong .NET số lượng lỗi trang mà một ứng dụng tạo ra thường cao, nhưng hàng triệu lỗi trang dường như quá nhiều ... Có vẻ như ứng dụng đã kích hoạt một điều kiện chủng tộc với GC, có thể không?

Có một số đoạn mã được thiết kế đã biết có thể dẫn đến tình trạng này không? Nếu không có trong mã là có một số cài đặt ẩn của khuôn khổ .NET có thể làm giảm số lỗi trang?

Việc tạo ra một số lượng lỗi trang mềm ngày càng cao có thể tránh được?

+0

Tại sao bạn quan tâm? Mất bao nhiêu thời gian? Bạn có hiểu rằng các lỗi mềm không đọc từ đĩa không? –

+0

Có, tôi biết rằng các lỗi mềm không đọc đĩa, nhưng số lượng rất lớn và tiếp tục tăng ... Có bình thường không? Tôi không nghĩ đó là một hành vi bình thường. – aleroot

+2

Hành vi bình thường là bỏ qua các số ngẫu nhiên và tập trung vào giải quyết các vấn đề. Đây có phải là một vấn đề, hay chỉ là một số ngẫu nhiên mà bạn tình cờ đã quan sát? –

Trả lời

4

Tôi thực sự khuyên bạn nên để nguyên thứ này nếu không phải là vấn đề. Tuy nhiên, nếu bạn gặp vấn đề về hiệu suất - Hãy thử và cách ly mã tạo ra các lỗi trang nhất - Có lẽ đó là nơi bạn đang sử dụng một đối tượng dấu chân bộ nhớ lớn.

Cố gắng giữ mã "không an toàn" của bạn càng đơn độc càng tốt, ví dụ: gói gọn tất cả các mã không an toàn trong một lớp hoặc hàm. Hãy nhớ rằng rối loạn .NET .NET có thể dẫn đến các biến chứng phần lớn là không cần thiết.

Kiểm tra bài viết này cho một chút giới thiệu không an toàn (Đó là một chút cũ nhưng vẫn còn đúng): http://www.codeproject.com/KB/cs/unsafe_prog.aspx

Ngoài ra, bạn có thể tăng thời gian cho đến khi GC thu thập, điều này có thể giúp

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