ความสำคัญของบูล IsReusable ในอินเตอร์เฟสตัวจัดการ http


130

เมื่อเขียน http จัดการ / โมดูลจะมีสมาชิกที่จะใช้อินเตอร์เฟซที่เรียกว่า - บูล IsReusable

ความสำคัญของสมาชิกนี้คืออะไร? หากฉันตั้งค่าเป็นเท็จ (หรือจริง) ส่วนที่เหลือของเว็บแอปจะมีความหมายอย่างไร


คำตอบ:


152

จุดเริ่มต้นปกติสำหรับตัวจัดการคือเมธอด ProcessRequest อย่างไรก็ตามคุณอาจมีโค้ดในตัวสร้างคลาสซึ่งรวบรวมค่าอินสแตนซ์บางค่าซึ่งมีราคาแพงในการสร้าง

หากคุณระบุ Reusable ให้เป็นจริงแอปพลิเคชันสามารถแคชอินสแตนซ์และใช้ซ้ำในคำขออื่นได้โดยเพียงแค่เรียกใช้เมธอด ProcessRequest ซ้ำแล้วซ้ำเล่าโดยไม่ต้องสร้างใหม่ทุกครั้ง

แอปพลิเคชันจะสร้างอินสแตนซ์ของตัวจัดการเหล่านี้ให้มากที่สุดเท่าที่จำเป็นในการจัดการกับโหลดปัจจุบัน

ข้อเสียคือหากจำนวนอินสแตนซ์ที่ต้องการมีมากกว่าอินสแตนซ์ที่มีอยู่ในปัจจุบันจะทำให้ต้องใช้หน่วยความจำมากขึ้น ในทางกลับกันพวกเขายังสามารถลดการใช้หน่วยความจำที่ชัดเจนเนื่องจากค่าอินสแตนซ์ของพวกเขาจะอยู่รอดรอบ GC และไม่จำเป็นต้องจัดสรรใหม่บ่อยๆ

ข้อแม้อีกประการหนึ่งคือคุณต้องแน่ใจว่าในตอนท้ายของการดำเนินการ ProcessRequest สถานะอ็อบเจ็กต์เป็นไปตามที่คุณต้องการสำหรับการร้องขออื่นเพื่อใช้อ็อบเจ็กต์ซ้ำ


2
คุณกล่าวถึงการใช้ออบเจ็กต์ซ้ำว่าเป็นการเพิ่มประสิทธิภาพคีย์ที่ทำได้โดยการระบุ IsReusable = True การตั้งค่า IsReusable = False ส่งผลให้เซิร์ฟเวอร์ไม่สร้างอินสแตนซ์หลายอินสแตนซ์ของตัวจัดการเลยทีเดียว IE - กำจัดคำขอพร้อมกันหรือไม่
เอียน

@ Ian ฉันเชื่อว่ามันทำหน้าที่เป็นหน้าปกติเมื่อนำมาใช้ใหม่เป็นเท็จแม้ว่าฉันอาจจะผิด เมื่อนำมาใช้ซ้ำได้อาจสามารถจัดการคำขอพร้อมกัน 6 รายการโดยมีอินสแตนซ์ 2 หรือ 3 อินสแตนซ์ (ตัวอย่างเท่านั้น) ในขณะที่ไม่สามารถใช้ซ้ำได้ก็จะต้องใช้อินสแตนซ์ / กระบวนการ 1: 1 ฉันนึกไม่ถึงว่า. Net จะปล่อยให้คำขอกองพะเนินเทินทึกเนื่องจากเธรดของผู้ปฏิบัติงาน 1 คนพยายามจัดการทั้งหมดในขณะที่รีเฟรช / เริ่มต้นสถานะใหม่อย่างต่อเนื่อง
DavidScherer

47

นอกจากคำตอบของ AnthonyWJones แล้วหากตัวจัดการ HTTP ของคุณกลับมาtrueเป็นไฟล์IsReusableคุณควรให้แน่ใจว่าจะด้ายปลอดภัยอย่างเต็มที่

ไม่มีสิ่งใดในเอกสารที่ระบุว่าไม่สามารถใช้ตัวจัดการแบบใช้ซ้ำได้พร้อมกันแม้ว่าการใช้งาน Microsoft ในปัจจุบันจะดูเหมือนว่าจะใช้ซ้ำติดต่อกันเท่านั้น แต่อย่างน้อยตามทฤษฎีแล้วอินสแตนซ์ตัวจัดการเดียวสามารถใช้ซ้ำได้พร้อมกันโดยการร้องขอหลายรายการดังนั้นคุณไม่ควรพึ่งพาข้อมูลใด ๆ ที่อาจถูกแก้ไขโดยเธรดอื่น ๆ พร้อมกัน


ขอโทษที่พูดมากไป แต่ใครก็ได้ช่วยอธิบายให้ละเอียดว่า "การสลับบริบท" หมายถึงอะไร หากคุณเข้าถึงสิ่งต่างๆจาก sesson หรือสตริงการสืบค้น (content.Request.QueryString) นั้นสามารถใช้ซ้ำได้หรือไม่?
zod

5
การสลับบริบทคือการที่ CPU หยุดประมวลผลบนเธรดหนึ่งและเริ่มประมวลผลบนเธรดอื่น IE CPU เปลี่ยนบริบทจากเธรดหนึ่งไปยังอีกเธรด สิ่งนี้เกิดขึ้นอย่างต่อเนื่องในพีซีทำให้เราเห็นภาพลวงตาของการทำงานหลายอย่างพร้อมกันก่อนที่จะมีคอมพิวเตอร์มัลติคอร์
Larry Dukek

ฉันไม่เข้าใจเมื่อ u กล่าวว่าอาจจะมีสวิทช์บริบทในเวลาใดก็ได้ เมื่อเราพิมพ์ url และกด enter จะดำเนินการทีละคำขอ ใช่ไหม

การสลับบริบทจะเป็นปัญหาเมื่อผู้ใช้หลายคนใช้แอปพลิเคชันในเวลาเดียวกัน ตัวอย่างเช่นหากผู้ใช้สองคนต้องการอัปเดตเรกคอร์ดเดียวกันในเวลาเดียวกันการสลับบริบทอาจทำให้เกิดปัญหาได้
Ishmael Smyrnow

7
คำแถลงเกี่ยวกับความIsReusableต้องการความปลอดภัยของเธรดนี้ดูเหมือนจะขัดแย้งกับการตอบสนองของ AnthonyWJones ตามที่ฉันเข้าใจย่อหน้าที่สาม (แอปพลิเคชันจะสร้างอินสแตนซ์ของ ... ) อินสแตนซ์ตัวจัดการที่ใช้ซ้ำได้จะไม่ถูกนำมาใช้ซ้ำพร้อมกัน แต่หลังจากเสร็จสิ้นการประมวลผลปัจจุบันเท่านั้น หากเป็นเช่นนั้นจริงก็ไม่จำเป็นต้องมีเธรดที่ปลอดภัย
Frédéric

3

หากคุณไม่ได้จัดเก็บสถานะใด ๆ ในอินสแตนซ์นั้น (เช่น: คุณไม่มีฟิลด์ใด ๆ (หรือที่เรียกว่า "ตัวแปรคลาส")) คุณควรนำกลับมาใช้ใหม่อย่างปลอดภัย

โดยค่าเริ่มต้นเป็นเท็จที่จะอยู่ในด้านความปลอดภัย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.