2009-05-15 31 views
11

Tôi đang cố gắng theo dõi một vấn đề trong mã MFC của chúng tôi trông giống như một vấn đề giới hạn tài nguyên. Bộ nhớ và CPU trông ổn. Theo tab quy trình trên Trình quản lý tác vụ, các đối tượng GDI của chúng tôi sẽ phù hợp với các ứng dụng khác, nhưng đối tượng USER của chúng tôi dường như là hệ số lớn hơn 10 ứng dụng khác.Windows "đối tượng USER"

"Đối tượng USER" là gì và giới hạn là gì?

Trả lời

12

Đây là một "cổ điển" MSDN bài viết: Give Me a Handle, and I'll Show You an Object

Thời gian qua tôi đã theo dõi xuống rò rỉ đối tượng Windows (mà tôi nghi ngờ bạn có) Process Explorer tiện dụng (handley?). Khung bên dưới có thể hiển thị một số đối tượng hệ thống được phân bổ, cộng với nó có thể thực hiện việc đếm đối tượng USER, GDI, vv đơn giản.

desktop heap, là một nhóm bộ nhớ nơi "công cụ" thực sự xử lý đại diện cho cuộc sống (ít nhất một số xử lý, không phải xử lý hạt nhân ít nhất). Đôi khi nó không quá nhiều bao nhiêu xử lý bạn đã phân bổ nhưng bao nhiêu bộ nhớ mỗi đối tượng dưới xử lý đó đang sử dụng. Bạn có thể gỡ lỗi heap this way. Nó là pain để cài đặt.

11

Đọc tất cả về nó here:

Object Categories

Hệ thống này cung cấp ba loại đối tượng: người dùng, giao diện thiết bị đồ họa (GDI), và hạt nhân. Hệ thống sử dụng các đối tượng người dùng để hỗ trợ quản lý cửa sổ, các đối tượng GDI để hỗ trợ đồ họa và các đối tượng hạt nhân để hỗ trợ quản lý bộ nhớ, thực thi quy trình và truyền thông liên tiến trình (IPC). Để biết thông tin về cách tạo và sử dụng một đối tượng cụ thể, hãy tham khảo tổng quan liên quan.

tài Objects

đối tượng Giao diện người dùng chỉ hỗ trợ một tay cầm mỗi đối tượng. Quy trình không thể kế thừa hoặc xử lý trùng lặp đối với đối tượng người dùng. Các quá trình trong một phiên không thể tham chiếu đến xử lý người dùng trong một phiên khác.

Có giới hạn lý thuyết 65.536 xử lý người dùng mỗi phiên. Tuy nhiên, số lượng xử lý người dùng tối đa có thể được mở mỗi phiên thường thấp hơn vì nó bị ảnh hưởng bởi bộ nhớ khả dụng. Ngoài ra còn có giới hạn xử lý người dùng mặc định cho mỗi quá trình. Để thay đổi giới hạn này, thiết lập giá trị registry sau đây:

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Windows \ USERProcessHandleQuota

Giá trị này có thể được thiết lập để một số từ 200 đến 18.000.

1

Tôi không biết những gì họ đang có, nhưng tôi biết họ bao gồm xử lý cửa sổ.

Đối với cửa sổ xử lý có một hệ thống tối đa rộng khoảng 32000, và một cho mỗi quá trình tối đa 10000. (chỉ có thể giới hạn đối tượng người dùng này, thay vì chỉ xử lý cửa sổ.)

Số lượng cửa sổ xử lý có thể rất cao nếu một số cách bạn đang bị rò rỉ xử lý cửa sổ, hoặc nếu bạn sử dụng một lượng lớn các cửa sổ. (Lưu ý rằng kiểm soát thậm chí đơn giản như một nhãn văn bản tiêu thụ một tay cầm cửa sổ duy nhất.)

+1

Bất kỳ tham chiếu nào của Microsoft với giới hạn 32000? –

+0

Tôi chạy vào giới hạn 10000 cho một quy trình.Khi đạt đến giới hạn, bạn sẽ nhận được 'lỗi tạo cửa sổ' khi cố tạo một đối tượng winforms mới. –

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