การใช้หน่วยความจำ

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

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

  • หน่วยความจํา — ดูการใช้หน่วยความจําแบบเรียลไทม์โดยหมวดหมู่การใช้งาน รวมถึงการใช้หน่วยความจําโดยทั้งส่วนประกอบที่กําหนดเองและกระบวนการภายในของเครื่องยนต์

  • กอง Luau — สร้างสแน็ปช็อตบนหน่วยความจําของกองที่อ้างถึงการจัดสรรหน่วยความจําให้กับสคริปต์ของคุณเครื่องมือนี้ให้มุมมองการจัดสรรหน่วยความจําหลายอย่างเพื่อช่วยให้คุณระบุการจัดสรรหน่วยความจําปัจจุบันและปัญหาจากมุมมองที่แตกต่างกัน เช่น ประเภทวัตถุและคลาสเครื่องยนต์นอกจากนี้ยังช่วยให้คุณสามารถสร้างสแน็ปช็อตหลายรายการเพื่อเปรียบเทียบความแตกต่างในการใช้หน่วยความจำเมื่อเวลาผ่านไป

คุณสามารถเปิดคอนโซลในระหว่างการทดสอบหรือประสบการณ์สดโดยใช้วิธีใดวิธีหนึ่งต่อไปนี้:

  • กด F9 .
  • พิมพ์ /console ลงในแชท
  • ใช้เมนูในประสบการณ์:
    1. เปิดเมนูในประสบการณ์ Roblox .

    2. เลือกแท็บ การตั้งค่า

    3. เลื่อนลงไปที่ คอนโซลนักพัฒนา และคลิก เปิด

หน่วยความจํา

เครื่องมือ หน่วยความจํา จัดหมวดหมู่และแสดงการใช้หน่วยความจําแบบเรียลไทม์มันแสดงการใช้หน่วยความจำใน MB ของแต่ละประเภทและสร้างแผนภาพเกี่ยวกับการเปลี่ยนแปลงการใช้งานเวลาผ่านไป

เพื่อดูการจัดสรรหน่วยความจำ:

  1. เปิด คอนโซลนักพัฒนา

  2. ขยายการดรอปดาวน์เครื่องมือเพื่อเลือก หน่วยความจํา

    Dropdown menu of all Developer Console tools with the Memory option highlighted for selection.
  3. ขยายการดรอปดาวน์ไคลเอนต์-เซิร์ฟเวอร์เพื่อเลือก ไคลเอนต์ หรือ เซิร์ฟเวอร์

  4. เรียกดูหมวดหมู่และรายการการใช้หน่วยความจำสำหรับหมวดหมู่หรือรายการที่คุณต้องการดูลายการใช้งานเวลาเกิน ให้ขยายหมวดหมู่เพื่อแสดงแผนภาพ

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

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

      ประเภทคําอธิบาย
      แคช HTTP สินทรัพย์ (รูปภาพ เมช ฯลฯ) โหลดจากเซิร์ฟเวอร์ Roblox และตอนนี้ถูกเก็บไว้ในแคชในหน่วยความจำ
      ตัวอย่าง Instances ในสถานที่
      สัญญาณ สัญญาณที่จะยิงระหว่างตัวอย่าง (อินสแตนซ์)
      กอง Lua堆 หน่วยความจํากองสําหรับทั้งสคริปต์หลัก (สคริปต์ที่จัดส่งพร้อมกับไคลเอนต์ Roblox) และสคริปต์ที่กําหนดเอง
      สคริปต์ สคริปต์ Luau
      การชนกันทางกายภาพ ข้อมูลการชนกันสำหรับการจำลองฟิสิกส์
      ส่วนฟิสิกส์ ทรงกลศาสตร์และความเคลื่อนไหวทางฟิสิกส์
      รูปแบบกราฟิกSolidModels ข้อมูลกราฟิกเพื่อสร้างโมเดลแข็ง
      ส่วน GraphicsMeshPart กราฟิกสำหรับวัตถุ MeshPart
      อนุภาคกราฟิก กราฟิกสำหรับระบบอนุภาค
      ส่วนกราฟิก กราฟิกสำหรับชิ้นส่วน
      กราฟิกSpatialHash การแสดงทั่วไป
      พื้นที่กราฟิก กราฟิกสำหรับพื้นที่
      เทกเจอร์กราฟิก หน่วยความทรงจำของเทกเจอร์
      ตัวละครเทกเจอร์กราฟิก หน่วยความทรงจำของเทกเจอร์สำหรับตัวละคร
      เสียง เสียงในหน่วยความจำ
      เสียงการสตรีม สตรีมเสียง
      ที่ดินโวเซลส์ โวเซลสภาพพื้นที่
      ที่ดินฟิสิกส์ ฟิสิกส์พื้นที่
      กุย หน่วยความจําที่ใช้โดยองค์ประกอบ GUI ทั่วไป
      แอนิเมชัน หน่วยความจําที่ใช้สําหรับข้อมูลแอนิเมชัน เช่น ท่าทาง และ KeyframeSequence ข้อมูลที่บันทึกไว้สําหรับแอนิเมชันตัวละคร
      การนำทาง หน่วยความจำที่ใช้โดยโครงสร้างสนับสนุนสำหรับ PathfindingService
    • หน่วยความจําที่ไม่ได้ติดตาม — การจัดสรรหน่วยความจําที่ระบบไม่สามารถโยนให้กับแหล่งที่เฉพาะเจาะจงได้ง่าย

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

    • หน่วยความจํา CoreScriptMemory — การใช้หน่วยความจําโดยสคริปต์เครื่องยนต์ภายในที่คุณไม่มีการควบคุมโดยตรง

    ในหมวดหมู่เหล่านี้ หน่วยความจําสถานที่ และ หน่วยความจําสถานที่สคริปต์ เป็นสิ่งสําคัญที่สุดสําหรับการเพิ่มประสิทธิภาพเนื่องจากช่วยให้คุณเข้าใจวิธีที่ตัวเลือกการสร้างและสคริปต์ของคุณส่งผลต่อการใช้หน่วยความจําและพื้นที่ศักยภาพสําหรับการปรับปรุงสำหรับข้อมูลเชิงลึกเพิ่มเติมใน หน่วยความจําสําหรับสถานที่ คุณสามารถใช้เครื่องมือ Luau heap เพื่อสร้างสแน็ปและวิเคราะห์การจัดสรรหน่วยความจําโดยตัวชี้วัดที่แตกต่างกัน

กอง Luau

เครื่องมือ Luau heap ช่วยให้คุณสามารถสร้างสแน็ปช็อตบนการจัดสรรหน่วยความจําของเฮาป์ได้ในปัจจุบันซึ่งอ้างถึงการจัดสรรหน่วยความจําให้กับสคริปต์ Luau เพื่อเก็บตัวแปร ตาราง ฟังก์ชัน และโครงสร้างข้อมูลระหว่างการทํางานอื่นๆเครื่องมือนี้ให้มุมมองการจัดสรรหน่วยความจําหลายอย่างเพื่อช่วยให้คุณระบุการจัดสรรหน่วยความจําและปัญหาจากมุมมองที่แตกต่างกัน เช่น ประเภทวัตถุและคลาสเครื่องยนต์นอกจากนี้ยังช่วยให้คุณสามารถสร้างสแน็ปช็อตหลายรายการเพื่อเปรียบเทียบความแตกต่างในการใช้หน่วยความจำเมื่อเวลาผ่านไป

สร้างสแน็ปช็อต

เพื่อสร้างสแน็ปช็อตของการจัดสรรหน่วยความจำของคุณ:

  1. เปิด คอนโซลนักพัฒนา

  2. ขยายกล่องเลื่อนเครื่องมือเพื่อเลือก LuauHeap

    Dropdown menu of all Developer Console tools with the LuauHeap option highlighted for selection.
  3. ขยายการดรอปดาวน์ไคลเอนต์-เซิร์ฟเวอร์เพื่อเลือก ไคลเอนต์ หรือ เซิร์ฟเวอร์

  4. คลิกที่ปุ่ม สร้างสแน็ปช็อต

วิเคราะห์การใช้หน่วยความจํา

เครื่องมือให้มุมมองห้ามุมที่คุณสามารถเลือกได้เพื่อดูการจัดสรรหน่วยความจำ Luau ของคุณตามมุมมองที่แตกต่างกัน:

  • กราฟ — แสดงต้นการใช้หน่วยความจํารวมที่มีแต่ละโนดแทนตัววัตถุที่มีหน่วยความจําถูกจัดสรร
  • แท็กวัตถุ — แสดงขนาดหน่วยความจำและจำนวนโดยประเภทการทำงาน เช่น functiontable และ thread
  • หมวดหมู่หน่วยความจำ — แสดงขนาดหน่วยความจำและจํานวนโดยหมวดหมู่หน่วยความจำที่กําหนดโดยเครื่องเครื่องยนต์กำหนดหมวดหมู่หน่วยความจำให้กับวัตถุในเวลาการจัดสรร
  • คลาสวัตถุ — แสดงขนาดหน่วยความจำและจํานวนโดยคลาสเครื่องยนต์ที่สคริปต์ของคุณใช้และเก็บตัวอย่างของพวกเขา เช่น EnumItem , Animation , CFrame .
  • การอ้างอิงที่ไม่ซ้ำกัน — แสดงจำนวนและจำนวนรวมของตัวอย่างที่ไม่มีพ่อในโมเดลข้อมูลและสามารถเข้าถึงได้โดยสคริปต์เท่านั้น พร้อมกับเส้นทางทั้งหมดที่ปักหมุดวัตถุตัวอย่าง

กราฟ

มุมมอง กราฟ เป็นมุมมองที่ละเอียดและซับซ้อนมากที่สุดในหมู่มุมมองทั้งหมดของกอง Luauมันแสดงต้นการใช้หน่วยความจํารวมที่มีแต่ละโนดแทนตัววัตถุที่มีหน่วยความจําได้รับการจัดสรรต้นไม้แสดงวิธีที่วัตถุเชื่อมต่อกันและค้นหาเส้นทางที่สั้นที่สุดระหว่างการอ้างอิงวัตถุมันมีคอลัมน์ขนาดหน่วยความจำต่อไปนี้: ขนาด — การใช้หน่วยความจำของตัวเองบวกการใช้หน่วยความจำโดยเนื้อหาภายในโครงสร้างข้อมูลตัวเอง — หน่วยความจําที่ได้รับการจัดสรรโดยตรงสําหรับโครงสร้างข้อมูลเองโดยไม่รวมการใช้หน่วยความจําโดยเนื้อหาใดๆ ที่มันมี

An example Graph view

รากของกราฟต้นไม้คือ registry ซึ่งเก็บข้อมูลทั้งหมดเกี่ยวกับเครื่องยนต์และ Luau เช่นฟังก์ชันที่เชื่อมโยงกับสัญญาณหรือห้องสมุดงาน ตารางที่ส่งคืนโดยสคริปต์โมดูล Classตารางและคลาสมักจะเป็นพ่อแม่ของรายการทั่วไปต่อไปนี้:

  • Module @Path.To.Module คือตารางที่ส่งคืนโดยสคริปต์โมดูล
  • name:123 =Path.To.Module เป็นฟังก์ชันภายในสคริปต์ที่กำหนดฟังก์ชันไม่ระบุชื่อไม่มีชื่อโดเนทระดับสูงสุดมักจะอ้างถึงฟังก์ชันสคริปต์ระดับโลกฟังก์ชันไม่ระบุชื่อไม่มีชื่อตัวอย่าง: :1= Workspace.[Username].Animate .
  • upvalue เป็นการอ้างอิงสำหรับฟังก์ชันที่จับได้ ดู จับขอบเขตท้องถิ่น สำหรับข้อมูลเพิ่มเติม
  • env หมายถึงสภาพแวดล้อมของฟังก์ชัน สำหรับกรณีส่วนใหญ่ มันเป็นตารางที่แทนที่ขอบเขตทั่วไปของสคริปต์
  • globals หมายถึงสภาพแวดล้อมของกระทู้
  • [key] แทนวัตถุที่ใช้เป็นกุญแจโต๊ะ
  • array แทนที่เป็นคอลเลกชัน
  • stack หมายถึงอาร์เรย์ที่เก็บฟังก์ชันทั้งหมดที่อยู่ในท้องถิ่น
  • constants แทนค่าคงที่ทั้งหมดที่ฟังก์ชันใช้

หมวดหมู่ความทรงจำ

มุมมองของ หมวดหมู่หน่วยความจํา แสดงขนาดหน่วยความจําและจํานวนโดยหมวดหมู่หน่วยความจําที่เครื่องกําหนดให้แก่วัตถุในเวลาการสร้างโดยค่าเริ่มต้น ประเภทหน่วยความจํามีชื่อเดียวกับสคริปต์หรือคุณสามารถกำหนดชื่อประเภทหน่วยความจําที่กําหนดเองได้โดยใช้ฟังก์ชัน debug.setmemorycategory

อ้างอิงที่ไม่ซ้ำกัน

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

  • นับ — แสดงจํานวนตัวอย่างที่มีชื่อเดียวกันที่สามารถเข้าถึงได้จากเส้นทางเดียวกัน เช่น ตัวอย่างหลายตัวที่ชื่อว่า Dragon ในตารางเดียวกัน
  • ตัวอย่างทั้งหมด — แสดงจํานวนรวมของวัตถุภายในรากเหล่านั้น เช่น ชิ้นส่วนทั้งหมด สคริปต์ และวัตถุเสียงที่สร้างตัวอย่าง Dragon อินสแตนซ์
An example Unique Reference view

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