ขอบเขตของคลาสแบบคงที่คืออะไร?

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

เนื่องจากกระบวนการแยกจากกัน สิ่งเหล่านี้จะทำงานภายใต้โดเมนแอปพลิเคชันที่แตกต่างกัน ดังนั้นจึงมี "อินสแตนซ์" แบบคงที่แยกจากกันหรือไม่

พุดดิ้งในรายละเอียดที่นี่คือว่าแอสเซมบลีกำลังถูกใช้โดยอะแดปเตอร์ BizTalk แบบกำหนดเองที่ฉันตั้งค่าให้ประมวลผลข้อความในชุดงานแบบขนาน นั่นคือสิ่งที่ฉันเรียกว่า "หลายกระบวนการ" ข้างต้น


person Keith Sirmons    schedule 12.11.2008    source แหล่งที่มา


คำตอบ (5)


หลายเธรดจะแชร์อินสแตนซ์ ด้วยเหตุนี้ คลาสแบบคงที่จึงสะดวกสำหรับการส่งสถานะระหว่างเธรด แต่คุณต้องระวังอย่างยิ่งที่จะไม่ทำให้เกิดสภาวะการแข่งขัน (Monitor หรือ lock คุณสมบัติของคุณ)

อย่างไรก็ตาม กระบวนการ หลายรายการควรอยู่ใน AppDomains ที่แยกจากกัน ดังนั้น แต่ละกระบวนการจึงมีอินสแตนซ์ของตัวเอง

person Joel Coehoorn    schedule 12.11.2008
comment
แล้วเว็บแอปพลิเคชันล่ะ หากฉันใช้คลาสคงที่เดียวกันที่กำหนดไว้ใน DLL #1 จากแอสเซมบลีแยกกันสองชุดอื่น ๆ (DLL #2 และ DLL #3) โดยเป็น #3 แอปพลิเคชันเว็บไซต์และ #2 DLL ที่อ้างอิงโดยเว็บไซต์ พวกเขาจะแชร์คลาสคงที่เดียวกันหรือไม่ ค่านิยม? - person Lord of Scripts; 11.07.2014
comment
@LordofScripts ใช่ เพราะทั้งหมดอยู่ใน AppDomain เดียวกัน - person Joel Coehoorn; 11.07.2014

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

person tvanfosson    schedule 12.11.2008

"ฉันมีแอสเซมบลีที่อาจใช้มากกว่าหนึ่งกระบวนการในแต่ละครั้ง หากฉันใช้คลาสแบบคงที่ กระบวนการหลาย ๆ จะใช้ "อินสแตนซ์" เดียวกันของคลาสนั้นหรือไม่

ไม่ พวกเขาทั้งหมดมีกรณีแยกกัน

"เนื่องจากกระบวนการแยกจากกัน สิ่งเหล่านี้จะทำงานภายใต้โดเมนแอปพลิเคชันที่แตกต่างกัน ดังนั้นจึงมี "อินสแตนซ์" แบบคงที่แยกจากกันหรือไม่

ใช่.

person Ana Betts    schedule 12.11.2008

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

person Maxam    schedule 12.11.2008

คุณอาจต้องการดูรูปแบบซิงเกิลตัน ดูเหมือนว่าส่วนสำคัญคือคุณต้องการควบคุมจำนวนอินสแตนซ์ของบริการ

ฉันเดาว่าคุณต้องการ dll/project แยกต่างหากที่ให้บริการตามคำขอของลูกค้าทั้งหมด คุณสามารถใช้ static class/singleton/multiton เพื่อใช้ฟังก์ชันที่ต้องการได้ มันขึ้นอยู่กับสิ่งที่คุณพยายามทำให้สำเร็จจริงๆ

person mson    schedule 12.11.2008