2008-08-13 21 views
6

Tôi đã sử dụng CF Remote Performance Monitor, tuy nhiên điều này dường như chỉ theo dõi bộ nhớ được khởi tạo trong thế giới được quản lý trái ngược với thế giới không được quản lý. Vâng, tôi chỉ có thể đoán được điều này vì những con số được liệt kê trong profiler là cách ngắn nhất cho phép (32mb trên CE 5). Profiling một ứng dụng cụ thể với RPM cho tôi thấy rằng tổng mức sử dụng của tất cả cache chỉ quản lý khoảng 12mb và sau đó từ từ co lại như (tôi giả định) một cái gì đó không được quản lý bắt đầu yêu cầu nhiều bộ nhớ hơn. Thanh trượt bộ nhớ trong Hệ thống cũng cho biết rằng thiết bị rất ngắn trên bộ nhớ. Nếu tôi giết quá trình, thanh trượt sẽ hiển thị tất cả bộ nhớ quay lại. Vì vậy, nó phải (?) Là quá trình này được quản lý đó là nuốt bộ nhớ.Whats cách tốt nhất để tìm TẤT CẢ bộ nhớ của bạn khi phát triển trên Compact Framework?

Có cách nào đơn giản (ish?) Cách người ta có thể theo dõi việc sử dụng bộ nhớ không được quản lý theo cách nào đó có thể cho phép tôi khớp nó với các cuộc gọi P/Invoke tương ứng?

EDIT: Để tất cả các bạn gắn thẻ lại không phải là .NET, việc gắn thẻ câu hỏi như thế này làm lẫn lộn mọi thứ. Đó là .NETCF/Compact Framework. Tôi biết chúng có vẻ giống nhau nhưng chúng khác nhau vì .NET stone trong khi CF về cơ bản chỉ là một trình bao bọc xung quanh NotImplementedException.

+1

".NET stone trong khi CF về cơ bản chỉ là trình bao bọc xung quanh NotImplementedException." Tôi thích câu nói đó! – Stormenet

Trả lời

3

Thử bật Interop logging.

Ngoài ra, nếu bạn có quyền truy cập vào mã của dll mẹ đẻ bạn đang sử dụng, kiểm tra này: http://msdn.microsoft.com/en-us/netframework/bb630228.aspx

+0

Tôi biết đây là bài cũ nhưng hy vọng bạn sẽ thấy điều này và trả lời. Liên kết thứ hai đi tới http://msdn.microsoft.com/en-us/vstudio/aa496123 mà dường như là một trang web cấp cao nhất cho phòng thu trực quan. Bạn có nhớ những gì bạn đã liên kết với? –

1

Tôi đã chắc chắn đã chiến đấu với các vấn đề không được quản lý trong một C# quản lý ứng dụng trong một thời gian - đó là không dễ.

Điều tôi thấy hữu ích nhất là có đầu ra thường xuyên cho tệp nhật ký văn bản. Ví dụ bạn có thể in đầu ra của GlobalMemoryStatus sau mỗi vài phút cùng với ghi nhật ký mỗi khi bạn tải biểu mẫu mới. Từ đó bạn ít nhất có thể thấy rằng một trong hai bộ nhớ dần dần bị xói mòn, hoặc một khối rất lớn của bộ nhớ biến mất vào thời điểm cụ thể trong ngày.

Đối với chúng tôi, chúng tôi tìm thấy mất bộ nhớ dần dần cả ngày miễn là thiết bị đang được sử dụng. Từ đó chúng tôi cuối cùng đã phát hiện ra rằng thiết bị quét mã vạch đã được khởi tạo không có lý do cụ thể trong lớp Cơ sở mẫu của chúng tôi (tôi đổ lỗi cho nhà phát triển trước !:-)

Thiết lập đăng nhập này có thể là một rắc rối nhỏ, nhưng đối với chúng tôi trả cổ tức rất lớn về lâu dài, đặc biệt là với các thiết bị sử dụng trực tiếp chúng tôi có thể nhận được dữ liệu thực tế, thiết bị, ngăn xếp dấu vết từ trường hợp ngoại lệ, v.v.

1

Ok, tôi đang sử dụng C++ trên CE, chứ không phải C#. hữu ích, nhưng ...

Tôi sử dụng gói có tên Entrk toolbox theo dõi việc sử dụng bộ nhớ và tài nguyên, rò rỉ và ngoại lệ trong Windows CE. Khá giống với phiên bản giới hạn trọng lượng nhẹ của CE. Bí quyết có nhiều lần nhất không.

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