นี่อาจฟังดูเป็นคำถามแปลก ๆ แต่ในแผนกของฉันเรากำลังมีปัญหากับสถานการณ์ต่อไปนี้:
เรากำลังทำงานที่นี่ในแอปพลิเคชันเซิร์ฟเวอร์ซึ่งกำลังขยายใหญ่ขึ้นเรื่อย ๆ แม้ในจุดที่เรากำลังพิจารณาที่จะแบ่งออกเป็นส่วนต่าง ๆ (ไฟล์ DLL) การโหลดแบบไดนามิกเมื่อจำเป็นและการขนถ่ายในภายหลังเพื่อให้สามารถจัดการได้ ปัญหาด้านประสิทธิภาพ
แต่: ฟังก์ชั่นที่เราใช้กำลังผ่านพารามิเตอร์อินพุตและเอาต์พุตเป็นวัตถุ STL และตามที่กล่าวไว้ในคำตอบ Stack Overflowนี่เป็นความคิดที่แย่มาก (โพสต์นั้นมีวิธีแก้ปัญหาและแฮ็กบางอย่าง แต่ทั้งหมดนั้นดูไม่ค่อยจะแข็งนัก)
เห็นได้ชัดว่าเราสามารถแทนที่พารามิเตอร์อินพุต / เอาต์พุตด้วยประเภท C ++ มาตรฐานและสร้างวัตถุ STL จากสิ่งที่อยู่ภายในฟังก์ชั่น แต่สิ่งนี้อาจทำให้ประสิทธิภาพลดลง
สรุปว่าในกรณีที่คุณกำลังพิจารณาที่จะสร้างแอพพลิเคชั่นซึ่งอาจมีขนาดใหญ่ขึ้นซึ่งพีซีเครื่องเดียวไม่สามารถจัดการได้อีกต่อไปคุณจะต้องไม่ใช้ STL เป็นเทคโนโลยีเลย?
พื้นหลังเพิ่มเติมเกี่ยวกับคำถามนี้:
ดูเหมือนจะมีความเข้าใจผิดเกี่ยวกับคำถาม: ปัญหาคือสิ่งต่อไปนี้:
แอปพลิเคชันของฉันใช้ประสิทธิภาพจำนวนมาก (CPU, หน่วยความจำ) ในการทำงานให้เสร็จและฉันต้องการแยกงานนี้ ออกเป็นส่วนต่าง ๆ (เนื่องจากโปรแกรมถูกแบ่งออกเป็นหลาย ๆ ฟังก์ชั่นแล้ว) มันไม่ยากเลยที่จะสร้าง DLLs ออกจากแอปพลิเคชั่นของฉันและวางฟังก์ชั่นบางอย่างในตารางการส่งออกของ DLL เหล่านั้น สิ่งนี้จะส่งผลในสถานการณ์ต่อไปนี้:
+-----------+-----------+----
| Machine1 | Machine2 | ...
| App_Inst1 | App_Inst2 | ...
| | |
| DLL1.1 | DLL2.1 | ...
| DLL1.2 | DLL2.2 | ...
| DLL1.x | DLL2.x | ...
+-----------+-----------+----
App_Inst1 เป็นอินสแตนซ์ของแอปพลิเคชันที่ติดตั้งบน Machine1 ในขณะที่ App_Inst2 เป็นอินสแตนซ์ของแอปพลิเคชันเดียวกันที่ติดตั้งใน Machine2
DLL1.x เป็น DLL ติดตั้งบน Machine1 ในขณะที่ DLL2.x เป็น DLL ติดตั้งบน Machine2
DLLx.1 ครอบคลุมส่งออก function1
DLLx.2 ครอบคลุม function2 ที่ส่งออก
ตอนนี้ที่ Machine1 ฉันต้องการเรียกใช้งาน function1 และ function2 ฉันรู้ว่าสิ่งนี้จะโอเวอร์โหลด Machine1 ดังนั้นฉันต้องการส่งข้อความถึง App_Inst2 โดยขอให้อินสแตนซ์ของแอปพลิเคชันนั้นทำงาน function2
พารามิเตอร์อินพุต / เอาต์พุตของ function1 และ function2 เป็นวัตถุ STL (C ++ Standard Type Library) และเป็นประจำฉันอาจคาดหวังให้ลูกค้าทำการอัปเดตของ App_Inst1, App_Inst2, DLLx.y (แต่ไม่ใช่ทั้งหมดพวกเขาอาจอัพเกรด Machine1 แต่ ไม่ใช่ Machine2 หรืออัปเกรดแอปพลิเคชันเท่านั้น แต่ไม่ใช่ DLLs หรือในทางกลับกัน, ... ) เห็นได้ชัดว่าหากอินเทอร์เฟซ (พารามิเตอร์อินพุต / เอาต์พุต) เปลี่ยนแปลงจากนั้นลูกค้าจะถูกบังคับให้ทำการอัพเกรดอย่างสมบูรณ์
อย่างไรก็ตามดังที่กล่าวไว้ใน StackOverflow URL ที่อ้างถึงการคอมไพล์ใหม่อย่างง่ายของ App_Inst1 หรือหนึ่งใน DLLs อาจทำให้ทั้งระบบล่มสลายดังนั้นชื่อเดิมของโพสต์นี้จึงไม่แนะนำการใช้ STL (เทมเพลตมาตรฐาน C ++ Library) สำหรับแอพพลิเคชั่นขนาดใหญ่
ฉันหวังว่าฉันจะลบคำถาม / ข้อสงสัยออกไป