Saya menggunakan Unity dan terkadang saya menggunakan new
kata kunci th Update
, seperti new Vector3()
dll ...
Saya bertanya-tanya apakah ini menyebabkan kebocoran memori? Maksud saya di setiap frame Vector3 baru dibuat. Jika ini cara kerja itu berarti ada ribuan Vektor yang dibuat dalam memori. Apakah itu benar atau saya salah berpikir?
new Vector3
karenaVector3
astruct
. Jika itu adalah kelas maka itu masalah. Baca seluruh postingan tentang menggunakan Object pooling.Jawaban:
Di C # ada dua jenis tipe, kira-kira: tipe nilai dan tipe referensi .
Anda menggunakan
new
saat Anda membuat keduanya, tetapi tipe nilai dibuat di stack (sebagian besar waktu), dan hanya tipe referensi yang dibuat di heap. Setelah dibuat, tipe referensi bertahan sampai pengumpul sampah datang, menentukan mereka tidak lagi diperlukan, dan mengumpulkan mereka. Contoh pada tumpukan hancur secara efisien ketika bingkai tumpukan hilang (ketika fungsi mereka dibuat pada akhirnya).Vector3
adalah tipe nilai dalam Unity, jadi hampir semua instance yang pernah Anda buat akan disimpan di stack dan dengan demikian murah untuk dibuat dan dihancurkan. Jadi Anda tidak mungkin melakukan kesalahan apa pun di sini. Ini tentu saja tidak membuat kebocoran memori, dan hampir pasti tidak akan menjadi masalah kinerja (Anda ingin profil untuk memastikan, bagaimanapun).Membuat banyak jenis referensi baru setiap frame dapat bermasalah karena hal itu dapat mendorong pengumpul sampah untuk menjalankan lebih sering, menyebabkan pasak saat menjeda semua utas Anda untuk melakukan tugasnya. Tapi tipe nilai suka
Vector3
adalah taruhan yang cukup aman.sumber
int
lapangan di tipe referensi berakhir di tumpukan sejak referensi jenis disimpan di heap. Selain itu, +1