2008-11-12 6 views
16

Tôi có một hội đồng có thể được sử dụng bởi nhiều quá trình tại một thời điểm. Nếu tôi đang sử dụng một lớp tĩnh, liệu nhiều tiến trình có sử dụng cùng một "cá thể" của lớp đó không?Phạm vi của một lớp tĩnh là gì?

Vì các quy trình là riêng biệt, chúng có được chạy dưới sự khác biệt Tên miền ứng dụng, do đó có các "phiên bản" riêng biệt tĩnh không?

Bánh pudding trong chi tiết ở đây là cụm đang được sử dụng bởi bộ điều hợp BizTalk tùy chỉnh mà tôi được đặt để xử lý các thông điệp theo lô song song. Đó là những gì tôi gọi là "nhiều quy trình" ở trên.

Trả lời

10

Nhiều chủ đề sẽ chia sẻ một phiên bản. Vì lý do này, một lớp tĩnh có thể thuận tiện cho việc chuyển trạng thái giữa các luồng, nhưng bạn cần phải rất cẩn thận để không giới thiệu các điều kiện chủng tộc (Monitor hoặc lock các thuộc tính của bạn).

Tuy nhiên, nhiều quá trình phải nằm trong các miền AppDomain riêng biệt và do đó mỗi trường hợp có cá thể riêng của chúng.

+0

Điều gì về ứng dụng web. Nếu tôi sử dụng cùng một lớp tĩnh được định nghĩa trong DLL # 1 từ hai hội đồng riêng biệt khác nhau (DLL # 2 và DLL # 3), là # 3 một ứng dụng trang web và # 2 một DLL được tham chiếu bởi trang web, chúng sẽ chia sẻ cùng một lớp tĩnh giá trị? –

+1

@LordofScripts Có, bởi vì tất cả chúng đều nằm trong cùng một AppDomain –

13

Các lớp tĩnh tồn tại một lần cho mỗi miền ứng dụng. Trong trường hợp của bạn, nó sẽ phụ thuộc vào việc adapter có đang sử dụng nhiều luồng trong cùng một miền ứng dụng hay không (bằng cách chia sẻ một cá thể của lớp tĩnh) hoặc sử dụng nhiều tiến trình (do đó có các cá thể riêng biệt của lớp tĩnh).

+0

đánh bại tôi sau 4 giây –

2

Phạm vi của lớp tĩnh được giới hạn trong miền ứng dụng. Mỗi miền ứng dụng sẽ có bản sao riêng của bất kỳ biến tĩnh nào mà bạn có thể có. Nếu "quy trình" của bạn là các chuỗi trong cùng một miền ứng dụng, thì chúng sẽ chia sẻ các giá trị tĩnh. Nhưng nếu chúng là các tiến trình Windows riêng biệt thực tế, thì chúng sẽ có các miền ứng dụng khác nhau và do đó các bản sao riêng biệt.

6

"Tôi có một hội đồng có thể được sử dụng bởi nhiều quá trình tại một thời điểm. Nếu tôi đang sử dụng một lớp tĩnh, nhiều quá trình có sử dụng cùng một" cá thể "của lớp đó không?"

Không, tất cả đều có trường hợp riêng biệt.

"Vì các quy trình tách biệt, các quy trình này có đang chạy dưới sự khác biệt Tên miền ứng dụng, do đó có các" phiên bản "riêng biệt tĩnh không?"

Có.

2

Bạn có thể muốn xem mẫu Singleton. Gist có vẻ là bạn muốn kiểm soát số lượng các thể hiện dịch vụ.

Tôi đoán rằng bạn muốn một dll/dự án riêng biệt phục vụ tất cả các yêu cầu của khách hàng. Bạn có thể sử dụng lớp tĩnh/singleton/multiton để thực hiện chức năng mong muốn. Nó thực sự phụ thuộc vào những gì bạn đang cố gắng thực hiện.