Analysis
Memori terkelola

Memori dalam Unity

Untuk memastikan aplikasi Anda berjalan tanpa masalah kinerja, penting untuk memahami bagaimana penggunaan Unity dan mengalokasikan memori. Bagian dokumentasi ini menjelaskan bagaimana kerja memori di Unity, dan dimaksudkan untuk pembaca yang ingin memahami bagaimana mereka dapat meningkatkan kinerja memori dari aplikasi mereka.

Unity menggunakan tiga lapisan manajemen memori untuk menangani memori dalam aplikasi Anda:

  • Memori terkelola: Lapisan memori yang terkontrol yang menggunakan heap yang berhasil dan kolektor sampah untuk mengalokasikan secara otomatis dan menetapkan memori.
  • C# memori yang tidak dikelola: Lapisan manajemen memori yang dapat Anda gunakan bersamaan dengan nama Unity Collections dan paket. Jenis memori ini disebut "tidak dikelola" karena tidak menggunakan kolektor sampah untuk mengelola bagian memori yang tidak digunakan.
  • Memori asli: Memori C++ yang digunakan Unity untuk menjalankan mesin. Dalam kebanyakan situasi, memori ini tidak dapat diakses oleh pengguna Unity, tetapi berguna untuk menyadarinya jika Anda ingin aspek-aspek tertentu dari kinerja aplikasi Anda.

Memori terkelola

Mesin virtual scripting Mono dan IL2CPPmanaged memory (VMs) menerapkan sistem , yang kadang-kadang disebut sebagai sistem memori scripting. VMs ini menawarkan lingkungan memori terkontrol yang dibagi menjadi jenis berikut yang berbeda:

  • The managed heap: Bagian memori bahwa VM secara otomatis mengontrol dengan kolektor sampah (GC). Karena ini, memori yang dialokasikan pada heap yang berhasil disebut sebagai GC Allocation. ProfilerJendela yang membantu Anda untuk mengoptimalkan permainan Anda. Ini menunjukkan berapa banyak waktu yang dihabiskan di berbagai bidang permainan Anda. Sebagai contoh, dapat melaporkan persentase waktu yang dihabiskan rendering, aimating, atau dalam logika permainan Anda. More info
    Lihat di Glossary
    mencatat kejadian alokasi seperti sampel GC.Alloc.
  • Sitemap Ini dibangun dan tidak terikat sebagai langkah aplikasi Anda ke dan keluar dari setiap lingkup kode.The scripting stack: This is built up and unwound as your application steps into and out of any code scopes.
  • Sitemap Mengandung memori yang berkaitan dengan lapisan skrip Unity. Sebagian besar waktu, Anda tidak perlu memanipulasi memori VM asli, tetapi berguna untuk mengetahui bahwa itu termasuk memori yang terkait dengan kode yang dapat dieksekusi bahwa kode Anda menghasilkan, khususnya di sekitar penggunaan Native VM memory:, jenis data meta yang digunakan generics, dan memori yang diperlukan untuk menjalankan VM.Reflection uses, and the memory required to run the VM.

Karena sistem memori yang dikelola menggunakan VMs, memiliki lingkungan terkontrol yang secara otomatis melacak referensi alokasi untuk mengelola seumur hidup mereka. Ini berarti bahwa kurang mungkin untuk aplikasi Anda untuk melepaskan memori terlalu awal, sementara kode lain mencoba mengaksesnya. Ini juga berarti bahwa Anda memiliki beberapa perlindungan terhadap kebocoran memori yang terjadi ketika memori tidak dapat diakses dari kode, atau dari penumpukan memori yang tidak digunakan.

Menggunakan memori yang dikelola di Unity adalah cara termudah untuk mengelola memori dalam aplikasi Anda; tetapi memiliki beberapa kerugian. Pengumpul sampah nyaman digunakan, tetapi juga tidak dapat diprediksi dalam bagaimana rilis dan mengalokasikan memori, yang mungkin menyebabkan masalah kinerja seperti berantakan, yang terjadi ketika pengumpul sampah harus berhenti untuk melepaskan dan mengalokasikan memori. Untuk bekerja di sekitar ketidakprediksi ini, Anda dapat menggunakan C# lapisan memori yang tidak dikelola.

Untuk informasi lebih lanjut tentang bagaimana kerja memori yang berhasil melihat dokumentasi pada Memori terkelola.

C# memori yang tidak dikelola

C# unmanaged memory layer memungkinkan Anda untuk mengakses lapisan memori asli ke alokasi memori halus, dengan kenyamanan menulis kode C#.

Anda dapat menggunakan Unity.Collectionsnamespace (termasuk NativeArray) di API inti Unity, dan struktur data dalam akses C# memori yang tidak dikelola. Jika Anda menggunakan sistem kerja C# Unity, atau Burst, Anda harus menggunakan memori C# yang tidak dikelola. Untuk informasi lebih lanjut tentang ini, lihat dokumentasi tentang Sistem pekerjaan dan .

Memori asli

Inti C / C++ internal mesin Unity memiliki sistem manajemen memori sendiri, yang disebut sebagai native memory. Dalam kebanyakan situasi, Anda tidak dapat langsung mengakses atau memodifikasi jenis memori ini.

Unity menyimpan scenesAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
Lihat di Glossary
dalam proyek, aset, API grafis, driver grafis, subsistem dan buffer plug-inSatu set kode yang dibuat di luar Unity yang menciptakan fungsi dalam Unity. Ada dua jenis plug-ins yang dapat Anda gunakan di Unity: Managed plug-ins (diproduksi. Rakitan NET dibuat dengan alat-alat seperti Studio Visual) dan plug-ins asli (pustaka kode asli yang spesifik platform). More info
Lihat di Glossary
, dan alokasi dalam memori asli, yang berarti bahwa Anda tidak dapat mengakses memori asli melalui API C# Unity. Ini berarti bahwa Anda dapat memanipulasi data untuk aplikasi Anda dengan cara yang aman dan mudah, tanpa kehilangan manfaat dari kode asli dan performan yang ada di inti asli Unity.

Sebagian besar waktu, Anda tidak perlu berinteraksi dengan memori asli Unity, tetapi Anda dapat melihat bagaimana mempengaruhi kinerja aplikasi Anda setiap kali Anda menggunakan Profiler, melalui Profiler markerDitempatkan dalam kode untuk menggambarkan acara CPU atau GPU yang kemudian ditampilkan di jendela Unity Profileer. Ditambahkan ke kode Unity secara default, atau Anda dapat menggunakan untuk menambahkan penanda kustom Anda sendiri. More info
Lihat di Glossary
.

Analysis
Memori terkelola