OOP ด้วย C#

Dispose และ Finalize
– GC(Garbage Collector)จะทำลายเฉพาะสิ่งที่อยู่ใน heap เท่านั้น
– Method แบบ Public(unmange resort) มี Method Dispose เพื่อคืนทรัยากรให้กับระบบ
– Method Finalize ทำหน้าที่ในการคืนทัรพยากรให้กับระบบ
ความสัมพันธ์ระหว่าง Object lifetime,Garbage Collector และ Marchalling
Object lifetime ช่วงชีวิตของ Object ที่มีชีวิตอยู่ หมายความว่า ตั้งแต่เริ่มสร้าง Object จน ทำลาย Object ทิ้ง
Garbage Collector มีหน้าที่ในการจัดการหน่วยความจำอัตโนมัติ โดยจะทำการตรวจสอบเฉพาะ Object ที่หมดอายุ และสมควรถูกทำลายโดยกระบวนการที่ถูกต้องแน่นอน
Marchalling ใน C# มีความหมาย 2 แบบคือ
                                         1. แปลงข้อมูลที่อยู่ในรูปของไบต์ที่เรียงกันให้เป็น Text ในรูป xml เพื่อรับ-ส่งข้อมูลหรือ Object ไปยังระบบอื่น
                                         2. แปลง Com Object ให้เป็น Object แบบ.Net หรือที่เรียกว่า P/Invoke
การสร้างและทำลาย Object
 
เมื่อมีการสร้าง Object จะเกิดเหตุการณ์ดังนี้
1.จองหน่วยความจำ
2.กำหนดค่าเริ่มต้นให้กับ Object
3.ใช้งาน Object
4.ทำลาย Object
5.คืนทรัพยากรให้กับระบบ
ปัญหาที่พบจากขั้นตอนทั้ง 5 คือ
1.ลืมคืนทรัพยากรให้กับระบบ
2.จองหน่วยความจำผิด
ปัญหาดังกล่าวจะเห็นได้ว่าเราไม่สามารถควบคุม หรือคาดเดาได้ดังนั้นจึงมีคิดและแก้ใขโดยใช้ CLR เป็นตัวจัดการดังนี้
1.จองหน่วยความจำใน heap
2.กำหนดพื้นที่ใน heap ให้แก่ Object
3.ใช้งาน Object
4.ยกเลิกการใช้งาน Object
5.GC ปลดปล่อย heap
 
การจัดสรรหน่วยความจำ
เมื่อเริ่มต้นทำงาน CLR จองหน่วยความจำไว้ล่วงหน้าเพื่อใช้เก็บ Object ทั้งหมดหรือที่เรียกว่า heap และสร้าง NextObjPtr เพื่อทำหน้าที่ในการระบุตำแหน่งหน่วยความตัวถัดๆไป
ตามที่ผมเข้าใจ ตัวที่ใช้ในการชี้ตำแหน่งในหน่วยความจำมีลักษณะเป็น Stack ส่วน ตัวที่ใช้เก็บ Object นั้นมีลักษณะเหมือน Doublelinklist นั้นเองครับ
Root and Garbage Collection
GC จะทำการตรวจสอบ Object นั้นๆว่ามีการเข้าถึงหรือใช้งานอยู่หรือเปล่า โดยอาศัยการตรวจสอบ Root ดังนี้
1.มีการชี้แบบ Static หรือ Global
2.ชี้ไปยังตำแหน่ง Local ใน Stack นั้นๆ
3.ชี้พรารามิเตอร์ใน Stack
4.Register ใน CPU เก็บพอยต์เตอร์ใน heap
โดยมี CLR กับ JIT ทำหน้าที่ในการดูแลและยอมให้ Garbage เข้าตรวจสอบ
เริ่มแรก GC จะคิดเองว่าไม่มี Root ใดๆที่อ้างถึง Object นี้ ขณะที่ท่อง GC จะร่างแผนที่ไปด้วยเพื่อท่องจนครบ GC ก็จะรู้ว่า Object ใดมีมี Root
 
อ้างอิงจาก เรียนรู้ด้วยตนเอง OOP C# ASP.NET ของคุณลาภลอย วานิชอังกูร
 
………………………………… ยังมีต่อ …………………………………………………
 

กรุณา Comment สักหน่อยเถอะ จะได้ปรับปรุ่งให้ดีขึ้น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s