แม้ว่าฉันจะเข้าใจถึงผลกระทบที่ร้ายแรงของการเล่นกับฟังก์ชันนี้ (หรืออย่างน้อยก็คือสิ่งที่ฉันคิด) แต่ฉันก็ไม่เข้าใจว่าทำไมมันถึงกลายเป็นหนึ่งในสิ่งเหล่านี้ที่โปรแกรมเมอร์ผู้มีหน้ามีตาไม่เคยใช้แม้แต่คนที่ไม่รู้ด้วยซ้ำ มีไว้ทำอะไร.
สมมติว่าฉันกำลังพัฒนาแอปพลิเคชันที่การใช้งานหน่วยความจำแตกต่างกันมากขึ้นอยู่กับสิ่งที่ผู้ใช้ทำ วงจรชีวิตของแอปพลิเคชันสามารถแบ่งออกเป็นสองขั้นตอนหลัก: การแก้ไขและการประมวลผลแบบเรียลไทม์ ในระหว่างขั้นตอนการแก้ไขสมมติว่ามีการสร้างวัตถุหลายพันล้านหรือหลายล้านล้านชิ้น บางคนมีขนาดเล็กและบางคนไม่มีบางคนอาจมีเข้ารอบสุดท้ายและบางคนอาจไม่มีและสมมติว่าช่วงชีวิตของพวกเขาแตกต่างกันไปตั้งแต่ไม่กี่มิลลิวินาทีไปจนถึงชั่วโมงที่ยาวนาน จากนั้นผู้ใช้จะตัดสินใจเปลี่ยนไปใช้ขั้นตอนแบบเรียลไทม์ ณ จุดนี้สมมติว่าประสิทธิภาพมีบทบาทพื้นฐานและการเปลี่ยนแปลงขั้นตอนของโปรแกรมเพียงเล็กน้อยอาจนำมาซึ่งผลที่ตามมาอย่างหายนะ การสร้างออบเจ็กต์จะลดลงเหลือน้อยที่สุดเท่าที่จะเป็นไปได้โดยใช้พูลอ็อบเจ็กต์และจากนั้น GC จะส่งเสียงกังวานโดยไม่คาดคิดและโยนมันออกไปทั้งหมดและมีคนตาย
คำถาม: ในกรณีนี้ไม่ควรเรียก GC.Collect () ก่อนเข้าสู่ขั้นตอนที่สองหรือไม่?
ท้ายที่สุดทั้งสองขั้นตอนนี้ไม่เคยเหลื่อมเวลาซึ่งกันและกันและการเพิ่มประสิทธิภาพและสถิติทั้งหมดที่ GC รวบรวมได้จะมีประโยชน์เพียงเล็กน้อยที่นี่ ...
หมายเหตุ: ดังที่คุณบางคนได้ชี้ให้เห็นว่า. NET อาจไม่ใช่แพลตฟอร์มที่ดีที่สุดสำหรับแอปพลิเคชันเช่นนี้ แต่อยู่นอกเหนือขอบเขตของคำถามนี้ มีวัตถุประสงค์เพื่อชี้แจงว่าการเรียก GC.Collect () สามารถปรับปรุงพฤติกรรม / ประสิทธิภาพโดยรวมของแอปพลิเคชันได้หรือไม่ เราทุกคนยอมรับว่าสถานการณ์ที่คุณจะทำสิ่งนั้นหายากมาก แต่แล้วอีกครั้ง GC พยายามที่จะคาดเดาและทำได้ดีเกือบตลอดเวลา แต่ก็ยังเกี่ยวกับการคาดเดา
ขอบคุณ.