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?
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:
Đ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.
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 IsReusable
thì 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.
IsReusable
yê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.
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.