Tầm quan trọng của bool IsReustom trong giao diện xử lý http


130

Khi viết một trình xử lý http / mô-đun, có một thành viên giao diện để thực hiện được gọi là - bool IsReables .

Tầm quan trọng của thành viên này là gì? Nếu tôi đặt thành sai (hoặc đúng), điều này có nghĩa gì với phần còn lại của ứng dụng web?


Câu trả lời:


152

Điểm vào bình thường cho một trình xử lý là phương thức ProcessRequest. Tuy nhiên, bạn có thể có mã trong hàm tạo của lớp, tập hợp một số giá trị cá thể đắt tiền để xây dựng.

Nếu bạn chỉ định Tái sử dụng là đúng, ứng dụng có thể lưu trữ thể hiện và sử dụng lại nó trong một yêu cầu khác bằng cách gọi phương thức ProcessRequest của nó nhiều lần, mà không phải xây dựng lại nó mỗi lần.

Ứng dụng sẽ khởi tạo nhiều trình xử lý cần thiết để xử lý tải hiện tại.

Nhược điểm là nếu số lượng phiên bản cần thiết lớn hơn số lượng hiện tại, chúng sẽ gây ra nhiều bộ nhớ hơn. Ngược lại, họ cũng có thể giảm sử dụng bộ nhớ rõ ràng vì giá trị cá thể của họ sẽ tồn tại trong chu kỳ GC và không cần phải được phân bổ lại thường xuyên.

Một cảnh báo khác là bạn cần chắc chắn rằng vào cuối quá trình thực thi ProcessRequest, trạng thái đối tượng là như bạn muốn cho một yêu cầu khác sử dụng lại đối tượng.


2
Bạn đề cập đến việc tái sử dụng đối tượng là tối ưu hóa chính đạt được bằng cách chỉ định IsReUs = True. Sẽ thiết lập IsReUs = Kết quả sai trong máy chủ không khởi tạo nhiều phiên bản của trình xử lý bao giờ. IE - nó có loại bỏ các yêu cầu đồng thời không?
Ian

@ Tôi tin rằng nó hoạt động như một trang bình thường khi sử dụng lại là sai, mặc dù tôi có thể sai. Khi có thể sử dụng lại, nó có thể xử lý 6 yêu cầu đồng thời với 2 hoặc 3 trường hợp (chỉ ví dụ) trong khi không thể tái sử dụng, nó sẽ cần 1: 1 thể hiện / quy trình. Tôi không thể tưởng tượng được .Net sẽ cho phép các yêu cầu chồng chất khi 1 luồng công nhân cố gắng xử lý tất cả trong khi liên tục làm mới / khởi tạo lại trạng thái của nó.
DavidScherer

47

Hơn nữa với câu trả lời của AnthonyWJones, nếu trình xử lý HTTP của bạn trả về true cho IsReusablethì bạn nên đảm bảo rằng nó hoàn toàn được thread-safe.

Không có gì trong tài liệu để chỉ ra rằng các trình xử lý có thể tái sử dụng không thể được sử dụng đồng thời, mặc dù các triển khai hiện tại của Microsoft chỉ xuất hiện để sử dụng lại chúng liên tục. Nhưng, ít nhất là về mặt lý thuyết, một cá thể xử lý đơn lẻ có thể được sử dụng đồng thời bởi nhiều yêu cầu, vì vậy bạn không nên dựa vào bất kỳ dữ liệu nào có thể được sửa đổi bởi các luồng đồng thời khác.


Xin lỗi vì đã dày, nhưng ai đó có thể vui lòng giải thích về ý nghĩa của chuyển đổi bối cảnh của Cameron. Nếu bạn truy cập những thứ từ chuỗi sesson hoặc chuỗi truy vấn (content.Request.QueryString) thì có thể tái sử dụng hay không?
zod

5
Chuyển đổi ngữ cảnh là khi CPU dừng xử lý trên một luồng và bắt đầu xử lý trên luồng khác. IE CPU đã chuyển ngữ cảnh của nó từ luồng này sang luồng khác. Điều này xảy ra liên tục trong PC, nó cho chúng ta ảo tưởng về đa nhiệm trước khi có máy tính đa lõi.
Larry Dukek

Tôi không thể hiểu khi bạn nói Có thể có một chuyển đổi ngữ cảnh bất cứ lúc nào . Khi chúng ta gõ url và nhấn enter, điều này sẽ thực thi một yêu cầu tại một thời điểm. đúng ?

Việc chuyển ngữ cảnh sẽ là một vấn đề khi nhiều người dùng đang sử dụng một ứng dụng cùng một lúc. Ví dụ: nếu hai người dùng muốn cập nhật cùng một bản ghi cùng một lúc, thì công tắc ngữ cảnh có thể gây ra sự cố.
Ishmael Smyrnow

7
Tuyên bố này về IsReusableyêu cầu an toàn luồng dường như mâu thuẫn với phản ứng của AnthonyWJones. Theo tôi hiểu đoạn thứ ba của nó (Ứng dụng sẽ khởi tạo nhiều ...), một phiên bản xử lý có thể sử dụng lại sẽ không được sử dụng đồng thời, mà chỉ sau khi hoàn thành quá trình xử lý hiện tại. Nếu điều này là đúng, thì không cần phải an toàn.
Frédéric

3

Nếu bạn không lưu trữ bất kỳ trạng thái nào trong trường hợp đó (ví dụ: bạn không có bất kỳ trường nào (còn gọi là "biến lớp")) thì bạn nên sử dụng lại an toàn.

Theo mặc định, đó là sai về phía an toàn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.