แนะนำ, 2024

ตัวเลือกของบรรณาธิการ

ความแตกต่างระหว่างการกำจัด () และจบ () ใน C #

วิธีการกำจัด () และขั้นสุดท้าย () เป็นวิธีการของ C # ซึ่งมีการเรียกใช้เพื่อปลดปล่อยทรัพยากรที่ไม่มีการจัดการที่จัดโดยวัตถุ วิธี dispose () ถูกกำหนดไว้ใน IDisposable ของอินเตอร์เฟสในขณะที่ method finalize () นั้นถูกกำหนดไว้ใน object class ความแตกต่างที่สำคัญระหว่างการกำจัด () และสุดท้าย () คือวิธีการ กำจัด () จะต้องมีการเรียกใช้อย่างชัดเจนโดยผู้ใช้ในขณะที่วิธีการ จบ () จะถูกเรียกใช้โดยตัวเก็บขยะก่อนที่วัตถุจะถูกทำลาย ให้เราศึกษาความแตกต่างอื่น ๆ ระหว่างพวกเขาด้วยความช่วยเหลือของแผนภูมิเปรียบเทียบที่แสดงด้านล่าง

แผนภูมิเปรียบเทียบ

พื้นฐานสำหรับการเปรียบเทียบกำจัด ()จบการทำงาน ()
ที่กำหนดไว้เมธอดการกำจัด () ถูกกำหนดในอินเตอร์เฟส IDisposable ของอินเตอร์เฟสเมธอด finalize () id ที่กำหนดในคลาส java.lang.object
วากยสัมพันธ์โมฆะสาธารณะกำจัด () {
// ทิ้งรหัสที่นี่
}
โมฆะที่ได้รับการป้องกันจะเสร็จสิ้น () {
// รหัสสรุปที่นี่
}
เรียกวิธีการกำจัด () ถูกเรียกโดยผู้ใช้เมธอด finalize () ถูกเรียกใช้โดยตัวรวบรวมขยะ
วัตถุประสงค์วิธีการกำจัด () จะใช้เพื่อฟรีทรัพยากรที่ไม่มีการจัดการเมื่อใดก็ตามที่มันถูกเรียกวิธีการสิ้นสุด () จะใช้เพื่อเพิ่มทรัพยากรที่ไม่มีการจัดการก่อนที่วัตถุจะถูกทำลาย
การดำเนินงานวิธีการกำจัด () จะต้องดำเนินการเมื่อใดก็ตามที่มีวิธีการปิด ()วิธีการสิ้นสุด () จะต้องดำเนินการสำหรับทรัพยากรที่ไม่มีการจัดการ
ตัวระบุการเข้าถึงวิธีการกำจัด () ถูกประกาศให้เป็นสาธารณะวิธีการสิ้นสุด () จะประกาศเป็นส่วนตัว
การกระทำวิธีการกำจัด () เร็วขึ้นและกำจัดวัตถุออกทันทีวิธีการสิ้นสุดจะช้ากว่าเมื่อเทียบกับการกำจัด
ประสิทธิภาพวิธีการดำเนินการ () ดำเนินการทันทีโดยไม่ส่งผลกระทบต่อประสิทธิภาพของเว็บไซต์วิธีการสิ้นสุด () ช้าลงส่งผลกระทบต่อประสิทธิภาพของเว็บไซต์

คำจำกัดความของการกำจัด ()

วิธีการ dispose () ปล่อยทรัพยากรที่ไม่มีการจัดการที่จัดขึ้นโดยวัตถุของชั้นเรียน ทรัพยากรที่ไม่ได้รับการจัดการคือไฟล์การเชื่อมต่อข้อมูลเป็นต้นวิธีการกำจัด () ถูกประกาศใน IDisposeable อินเตอร์เฟสและนำไปใช้งานโดยคลาสโดยการใช้อินเตอร์เฟส IDisposable วิธีนี้ไม่ได้ถูกเรียกโดยอัตโนมัติ โปรแกรมเมอร์จะต้องดำเนินการด้วยตนเองเมื่อคุณสร้างคลาสที่กำหนดเองที่ผู้อื่นจะใช้ วิธีการมีไวยากรณ์ต่อไปนี้:

 โมฆะสาธารณะกำจัด () {// ทิ้งรหัสที่นี่} 

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

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

ความหมายของการจบ ()

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

ไวยากรณ์ของวิธีการจบ ():

 โมฆะป้องกันการทำให้จบ () {// รหัสการสรุปที่นี่} 

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

เมธอด finalize () มีผลต่อต้นทุนของการทำงานเนื่องจากไม่ได้เพิ่มหน่วยความจำทันที ใน C # นั้นวิธีการสุดท้ายจะถูกเรียกโดยอัตโนมัติเมื่อมี destructors

ความแตกต่างที่สำคัญระหว่างการกำจัด () และการสรุป ()

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

สรุป:

ขอแนะนำให้ใช้วิธีการกำจัด () เหนือวิธีการสิ้นสุด () เนื่องจากเร็วกว่าการสรุป นอกจากนี้ยังสามารถเรียกได้ตลอดเวลาเมื่อต้องการ

Top