Kode Unity di instrumentasi dengan sejumlah besar penanda 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 yang memberi Anda wawasan tentang apa yang memakan waktu dalam aplikasi Anda. Tabel berikut menjelaskan beberapa penanda umum yang dilakukan:
Penanda dasar benang utama memberikan pemisahan yang jelas antara waktu yang dihabiskan pada aplikasi Anda dan waktu yang dihabiskan pada kegiatan Editor dan Profiler. ProfilerRecorder juga dapat menggunakan penanda ini untuk mendapatkan waktu bingkai pada benang utama.
Marker | Function |
---|---|
PlayerLoop | Mengandung sampel yang berasal dari loop utama aplikasi Anda. Jika Anda menargetkan Editor bukan mode Play saat Pemain berjalan dalam Editor dalam mode Play aktif, sampel PlayerLoop bersarang di bawah EditorLoop. |
EditorLoop (Editor hanya marker) |
Mengandung sampel yang berasal dari loop utama Editor. Ini hanya hadir saat Anda profil pemain di Editor. Ketika Anda menargetkan Mode Play dengan Profiler, sampel EditorLoop menunjukkan jumlah waktu yang dihabiskan rendering dan menjalankan Editor yang berisi Pemain. Profiler tidak mencatat data rinci lebih lanjut di bawah penanda EditorLoop. Ini karena sampel yang kode Editor memancarkan sementara Profiler adalah profiling Play mode membuat profil besar overhead. Others di Login Grafik modul profiler. Akibatnya, sampel EditorLoop biasanya kontributor terbesar untuk kategori itu. Jika Anda ingin melihat apa yang dilakukan Editor dalam waktu ini dan juga mendapatkan rincian yang lebih rinci tentang apa yang berkontribusi pada kategori Others.mengubah target Profiler ke Editor sebagai gantinya Editor mengubah apa tampilan Profiler dalam pane rinci modul CPU Profiler, serta pemecahan Kategori dalam grafik modul Profiler CPU. Ini karena sampel yang sebelumnya tersembunyi di bawah sampel EditorLoop kemudian berkontribusi terhadap kategori masing-masing. |
Profiler.CollectEditorStats (Editor hanya marker) |
Mengandung sampel yang berkaitan dengan mengumpulkan statistik untuk modul Profiler aktif yang berbeda. Samples yang bersarang di bawah Profiler. Penanda CollectGlobalStats menunjukkan berapa banyak overhead yang terjadi pemain ketika mengumpulkan statistik modul tertentu. Semua sampel anak lain hanya mencerminkan efek mereka di Editor. Untuk menghapus overhead yang ada modul tertentu, tutup grafik modul, atau memanggil Profiler.SetAreaEnabled. Note: Modul Profiler kustom yang menggunakan counter built-in memungkinkan area counter built-in, bahkan jika modul itu milik telah dinonaktifkan. Untuk mencegah Profiler dari mengumpulkan statistik ini dan membuat pengumpulan overhead, pastikan bahwa kedua modul Profiler bawaan dan modul Profiler kustom Anda dinonaktifkan. |
Ada penanda tertentu yang hanya muncul ketika Anda profil di Editor Unity. Penanda ini tidak muncul dalam aktivitas yang berhubungan dengan pemain, dan hanya berkaitan dengan aktivitas Editor. Penanda-only termasuk pemeriksaan keamanan seperti GetComponentNullErrorWrapper, yang membantu untuk mengidentifikasi penggunaan komponen null; CheckConsistensi, yang memvalidasi pengaturan objek; CheckAllowDestructionRecursive, yang merupakan pemeriksaan penghancuran; dan kegiatan terkait Prefab.
Secara default, dalam tampilan Hierarchy modul Profiler CPU, tumpukan sampel dengan penanda-only runtuh dan diberi nama EditorOnly [SampleName]
. Meskipun tumpukan sampel ini atau sampel anak mereka mungkin menyebabkan alokasi yang berhasil yang dapat menyebabkan pengumpulan sampah yang terpicu, mereka tidak berkontribusi pada GC. Nilai Alloc sampel induk mereka jika mereka runtuh.
Untuk mengubah perilaku default, di kanan atas pane detail modul, pilih menu konteks dan menonaktifkan pengaturan Gratis download. Ketika Anda melakukan ini, Anda dapat memperluas sampel dan berkontribusi GC. Nilai Alloc untuk penanda yang menarik.
Pilihan ini tidak mempengaruhi pandangan Timeline, dan sampel dan anak-anak mereka muncul diperluas. Anda biasanya dapat mengabaikan sampel dengan penanda ini, karena mereka berhubungan dengan aktivitas Editor-only dan tidak memiliki dampak pada mengurangi alokasi yang dikelola. Namun, mereka dapat berguna untuk menyelidiki jika Anda memiliki masalah serius dengan dampak kinerja yang mereka miliki pada mode Play.
Kecuali Anda menggunakan Sistem Pekerjaan, sebagian besar kode skrip Anda di bawah marker berikut. Untuk informasi sampel Sistem Kerja, lihat bagian Penanda multi threading dari halaman ini.
Untuk rincian lebih lanjut tentang Loop Pembaruan Unity, lihat dokumentasi di . Jika Anda telah memasukkan callback Anda sendiri ke dalam melalui, sampel pembaruan skrip Anda muncul di bawah penanda PlayerLoopSystem utama masing-masing, jika dimasukkan sebagai subsistem, atau sendiri, jika masuk langsung ke loop utama.
Marker | Function |
---|---|
BehaviourUpdate | Mengandung semua sampel metode Login Sitemap. |
CoroutinesDelayedCalls | Mengandung semua sampel Coroutines setelah hasil pertama mereka. |
FixedBehaviourUpdate | Mengandung semua sampel metode Monobehaviour.FixedUpdate. |
PreLateUpdate.ScriptRunBehaviourLateUpdate | Mengandung semua sampel metode Login Login. |
Update.ScriptRunBehaviourUpdate | Mengandung semua sampel Login Sitemap dan Coroutines. |
Penanda ini mengandung sampel di mana CPU menghabiskan data pemrosesan waktu untuk GPU, atau di mana mungkin menunggu GPU selesai. Jika Login Catalog tidak tersedia, atau menambahkan terlalu banyak overhead, toolbarSe baris tombol dan kontrol dasar di bagian atas Editor Unity yang memungkinkan Anda untuk berinteraksi dengan Editor dengan berbagai cara (misalnya scaling, terjemahan). More info
Lihat di Glossary dalam profiler rincian modul pane tidak menunjukkan informasi ini. Sampel di bawah penanda ini dapat memberi Anda ide yang baik dari apakah aplikasi Anda adalah CPU-bound atau GPU-bound.
Marker | Function |
---|---|
WaitForTargetFPS | Menunjukkan berapa banyak waktu aplikasi Anda yang dihabiskan menunggu FPS yang ditargetkan bahwa Aplikasi.targetFrameRate menentukan. Jika sampel adalah subsample dari Gfx.WaitForPresentOnGfxThread, itu mewakili jumlah waktu bahwa aplikasi Anda menghabiskan menunggu untuk GPU. Sebagai contoh, ini bisa saat GPU menghabiskan menunggu VSync berikutnya, jika dikonfigurasi pada WordPress.org, atau jika vSync diberlakukan pada platform target Anda. Namun, sampel dengan penanda ini juga dipancarkan jika GPU belum selesai menyusun bingkai. Untuk menentukan apa yang menyebabkan sampel dengan penanda ini untuk menggunakan banyak waktu, beralih ke Tampilan garis waktu dalam modul profiler CPU. Dalam pandangan ini, Anda dapat memeriksa apa yang terjadi pada benang render dan berapa banyak waktu berlalu antara sampel ini berakhir dalam bingkai saat ini dan sampel yang sama berakhir dalam bingkai sekitarnya. Jika durasi lebih besar dari waktu bingkai aplikasi Anda harus (didasarkan pada tingkat bingkai yang ditargetkan atau vSync) bingkai Anda mengambil terlalu lama untuk membuat atau menghitung. Jika itu kasus, menyelidiki benang render dan melihat berapa banyak waktu yang dihabiskan di Gfx. PresentFrame atas pekerjaan lain yang harus disiapkan dan mengeluarkan perintah untuk GPU. Jika benang render menghabiskan sejumlah besar waktu di Gfx.PresentFrame, pekerjaan rendering Anda adalah GPU-bound. Jika waktu render thread dihabiskan menyiapkan perintah, aplikasi Anda adalah CPU-bound. Untuk mengetahui apa yang harus difokuskan, jika aplikasi Anda terikat GPU, profil GPU bekerja dengan Profiler Unity atau profiler platform. Untuk informasi lebih lanjut, lihat dokumentasi manual Pengguna tentang cara . Note: Editor tidak VSync di GPU dan bukan menggunakan WaitForTargetFPS untuk mensimulasikan penundaan VSync. Beberapa platform, di Android dan iOS tertentu, menegakkan VSync atau memiliki rentang frame rate default 30 atau 60. |
Gfx.PresentFrame | Mewakili waktu aplikasi Anda yang dihabiskan menunggu GPU untuk membuat dan menyajikan bingkai, yang mencakup menunggu VSync. Sampel dengan penanda WaitForTargetFPS pada benang utama menunjukkan berapa banyak waktu yang dihabiskan menunggu VSync. |
Gfx.ProcessCommands | Berisi semua pemrosesan perintah rendering pada benang render. Aplikasi Anda mungkin telah menghabiskan beberapa waktu pemrosesan ini menunggu perintah VSyncSinkronisasi vertikal (VSync) adalah pengaturan tampilan yang menangkap tingkat bingkai permainan untuk mencocokkan tingkat refresh monitor, untuk mencegah robek gambar. Lihat di Glossary atau baru dari benang utama, yang dapat Anda lihat dari sampel anak Gfx.WaitForPresentOnGfxThread. |
Gfx.WaitForCommands | Menunjukkan bahwa benang render siap untuk perintah baru. Jika Anda melihat penanda ini, mungkin menunjukkan bottleneck pada benang utama. |
Sitemap e.g.<GraphicsAPIName>.WaitForLastPresent GfxDeviceD3D11.WaitForLastPresent GfxDeviceD3D12.WaitForLastPresent GfxDeviceMetal.WaitForLastPresent |
Sampel dengan penanda ini muncul ketika benang utama menunggu GPU untuk membalikkan nomor bingkai ke layar (Time.frameCount - QualitySettings.maxQueuedFrames + 1 ). Ini berarti bahwa jika KualitasSettings.maxQueuedFrames lebih besar dari satu, kali ini dihabiskan menunggu GPU untuk membalik bingkai bahwa aplikasi Anda diminta untuk membuat dalam bingkai benang utama sebelumnya.Untuk detail lebih lanjut tentang sampel ini dan gambaran Pipa Bingkai Unity, lihat. |
Gfx.WaitForPresentOnGfxThread | Menunjukkan bahwa benang utama siap untuk memulai rendering bingkai berikutnya, tetapi benang render tidak selesai menunggu GPU untuk menyajikan bingkai. Ini mungkin menunjukkan bahwa aplikasi Anda adalah GPU-bound. Untuk melihat apa benang render secara bersamaan menghabiskan waktu, periksa Login Tampilan Timeline modul profiler. Jika benang render menghabiskan waktu di Kamera. Render, aplikasi Anda adalah CPU-bound dan mungkin menghabiskan terlalu banyak waktu mengirim panggilan atau tekstur ke GPU. Jika benang render menghabiskan waktu di Gfx.PresentFrame, aplikasi Anda adalah GPU-bound, atau mungkin menunggu VSync di GPU. A WaitForTargetFPS sub-sample dari Gfx.WaitForPresentOnGfxThread mewakili bagian dari fase Present bahwa aplikasi Anda menghabiskan menunggu VSync. Fase Present adalah bagian dari waktu antara Unity menginstruksikan API grafis untuk menukar penyangga, pada saat operasi ini selesai. |
Gfx.WaitForRenderThread | Menunjukkan bahwa benang utama menunggu benang render untuk memproses semua perintah dalam aliran perintahnya. Sampel dengan penanda ini hanya muncul dalam rendering multithreaded. |
Sampel menyoroti aktivitas Mono atau IL2CPPBack-end scripting bersatu yang dapat Anda gunakan sebagai alternatif untuk Mono ketika proyek bangunan untuk beberapa platform. More info
Lihat di Glossary scripting backendKerangka kerja yang skrip di Unity. Unity mendukung tiga backend scripting yang berbeda tergantung pada platform target: Mono, .NET dan IL2CPP. Platform Windows Universal, namun hanya mendukung dua: .NET dan IL2CPP. More info
Lihat di Glossary dan berguna untuk memecahkan masalah dengan pengumpulan sampah dan alokasi.
Marker | Function |
---|---|
GC.Alloc | Mewakili alokasi di landak yang berhasil yang mengandung alokasi terkelola yang tunduk pada pengumpulan sampah otomatis. Untuk mengurangi waktu aplikasi Anda menghabiskan pada pengumpulan sampah otomatis, Anda harus meminimalkan jenis sampel ini. |
GC.Collect | Mewakili sampel yang berkaitan dengan pengumpulan sampah. Kapanpun Unity perlu melakukan pengumpulan sampah, berhenti menjalankan kode program Anda dan hanya melanjutkan eksekusi normal ketika kolektor sampah telah menyelesaikan semua pekerjaannya. Login Jika Anda telah mengaktifkan Note: kolektor sampah mungkin tidak menyelesaikan pekerjaannya dalam satu bingkai.Koleksi Sampah Memahami manajemen memori otomatis. |
Mono.JIT Mono-only |
Mengandung sampel yang berkaitan dengan kompilasi tepat waktu dari metode scripting. Ketika fungsi dieksekusi untuk pertama kalinya, Mono mengkompilasinya dan Mono. JIT mewakili overhead kompilasi ini. |
UnsafeUtility.Malloc | Mengandung sampel yang memanggil ketidakamanan. Malloc untuk mengalokasikan memori yang tidak dikelola. Sementara Pengumpul Sampah tidak melacak memori ini, mengalokasikan memori mungkin memiliki dampak kinerja yang signifikan yang ditunjukkan dengan sampel ini. Untuk menyelidiki sumber panggilan ini, Anda dapat mengaktifkan perekaman Call StackDaftar metode yang disebut pada waktu lari, diatur sebagai tumpukan pertama-out terakhir. Lihat di Glossary untuk penanda ini di jendela Profiler. |
Penanda ini mengandung sampel yang tidak mengukur siklus CPU yang dikonsumsi, tetapi alih-alih menyoroti informasi yang berkaitan dengan sinkronisasi benang dan Sistem Kerja. Ketika Anda melihat sampel ini, gunakan modul Profiler CPU Timeline view untuk memeriksa apa yang terjadi pada benang lain pada saat yang sama.
Marker | Function |
---|---|
Idle | Mengandung sampel yang menunjukkan panjang waktu bahwa Thread Pekerja tidak aktif. Benang pekerja tidak aktif setiap saat bahwa Sistem Kerja tidak menggunakannya, dan masuk ke mode tunggu, di mana ia menunggu pada semaphore. celah kecil antara Idle sampel biasanya terjadi ketika Job System membangun mereka, misalnya, untuk menjadwalkan pekerjaan baru. kesenjangan yang lebih panjang mungkin menunjukkan bahwa pekerjaan asli yang belum berperang berjalan pada benang. |
JobHandle.Complete | Mengandung sampel yang menunjukkan ketika titik sinkron pada pekerjaan terjadi. Sinkronkan poin mungkin memiliki dampak kinerja pada aplikasi Anda dan mungkin mengganggu pelaksanaan kode kerja multi-threaded. Untuk memudahkan untuk menemukan di mana titik sinkronisasi terjadi, aktifkan perekaman Call Stack untuk sampel ini. Dalam tampilan Timeline modul profiler CPU Anda dapat mengaktifkan Flow Events untuk melihat pekerjaan yang selesai pada titik ini. |
Semaphore.WaitForSignal | Mengandung sampel yang menggambarkan titik sinkronisasi pada benang. Untuk menemukan benang yang menunggu, periksa pandangan Timeline untuk sampel yang berakhir segera sebelum yang ini. |
WaitForJobGroupID | Pagar Sinkronkan pada JobHandle dipicu. Ini mungkin menyebabkan pekerjaan mencuri, yang terjadi ketika seorang pekerja menyelesaikan pekerjaannya dan kemudian melihat pekerjaan pekerja lain untuk menyelesaikan. Ini menunjukkan sebagai sampel pekerjaan yang dieksekusi di bawah penanda ini. Pekerjaan yang "stolen" tidak tentu pekerjaan yang sedang menunggu. |
Tabel berikut menguraikan beberapa fisika tingkat tinggi Profiler markersDitempatkan 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. FixedUpdate memanggil semua pengukuran ini.
Marker | Function | |
---|---|---|
Physics.FetchResults | Mengandung sampel yang mengumpulkan hasil simulasi fisika dari physics engineSebuah sistem yang mensimulasikan aspek sistem fisik sehingga benda dapat mempercepat dengan benar dan dipengaruhi oleh tabrakan, gravitasi dan kekuatan lainnya. More info Lihat di Glossary, seperti aliran kontak, memicu tumpang tindih, dan peristiwa kerusakan jointKomponen fisika yang memungkinkan koneksi dinamis antara komponen Rigidbody, biasanya memungkinkan beberapa tingkat pergerakan seperti engsel. More info Lihat di Glossary. |
|
Physics.Interpolation | Mengandung sampel yang mengukur waktu eksekusi Fisika. Metode interpolasi. Metode ini mengelola interpolasi posisi dan rotasi untuk semua objek fisika dalam aplikasi Anda. | |
Physics.Processing | Mengandung sampel yang menghabiskan waktu menunggu pada benang utama sampai simulasi fisika selesai di semua benang. Jika aplikasi Anda menghabiskan banyak waktu dalam Fisika. Pengolahan tetapi hanya memiliki beberapa fisika yang terkait GameObjectsObjek mendasar dalam adegan Unity, yang dapat mewakili karakter, props, pemandangan, kamera, waypoints, dan banyak lagi. Fungsi GameObject didefinisikan oleh Komponen yang melekat padanya. More info Lihat di Glossary di SceneAdegan 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, mungkin menunjukkan bahwa benang pekerja mengambil tugas sistem lain karena mencuri pekerjaan dan dilaporkan sebagai fisika. Ini karena saat menunggu, benang utama mengambil pekerjaan dari antrian prioritas tinggi. |
|
Physics.ProcessingCloth | Mengandung sampel yang mengukur waktu eksekusi Fisika. Metode pengolahanCloth. Metode ini memproses semua pekerjaan fisika kain. Perluas sampel ini untuk menunjukkan detail tingkat rendah dari pekerjaan dilakukan secara internal di mesin fisika. | |
Physics.ProcessReports | Mengandung sampel yang sesuai dengan waktu yang dihabiskan data fisika ke skrip melalui callback seperti OnTriggerEnter. Login Sampel ini tidak menghitung data yang diperlukan karena telah disiapkan selama FetchResults.Note: There are four distinct sub-stages: |
|
Physics.Contacts | Mengandung sampel yang mengukur waktu eksekusi Fisika. Sitemap Proses ini OnCollisionEnter, OnCollisionExit, dan acara OnCollisionStay. | |
Physics.JointBreaks | Mengandung sampel yang mengukur waktu eksekusi Fisika. Login Proses ini diperbarui dan pesan terkait dengan sendi yang rusak. | |
Physics.TriggerEnterExits | Mengandung sampel yang mengukur waktu eksekusi Fisika. Login Proses ini OnTriggerEnter dan acara OnTriggerExit. | |
Physics.TriggerStays | Mengandung sampel yang mengukur waktu eksekusi Fisika. Login Proses ini Acara OnTriggerStay. | |
Physics.Simulate | Mengandung sampel yang mengukur jumlah waktu yang dihabiskan bekerja pada prasyarat untuk metode Fisika. Login. Metode ini menginstruksikan mesin fisika untuk menjalankan simulasinya, yang memperbarui keadaan fisika saat ini. | |
Physics.UpdateBodies | Mengandung sampel yang memperbarui semua posisi dan rotasi tubuh fisika. Untuk setiap permainan Objek yang memiliki komponen RigidbodyKomponen yang memungkinkan GameObject untuk dipengaruhi oleh gravitasi simulasi dan kekuatan lainnya. More info Lihat di Glossary, sampel dengan penanda ini membaca pose dari mesin fisika dan menulisnya ke Transform. |
|
Physics.UpdateCloth | Mengandung sampel yang mengukur waktu eksekusi Fisika. Metode UpdateCloth. Metode ini memproses pembaruan yang berkaitan dengan kain dan Mesh yang dikupas. |
Untuk informasi lebih lanjut tentang siklus hidup skrip dan sampel umum dalam siklus hidup skrip, lihat dokumentasi pada Pesanan Pelaksanaan Fungsi Acara.
Profiler CPU mendeteksi beberapa masalah kinerja umum dan memperingatkan Anda tentang mereka. Ini muncul di kolom Peringatan tampilan Login Hierarchy modul profiler dalam pane detail modul.
Profiler mendeteksi beberapa panggilan tertentu yang harus Anda hindari dalam konteks kinerja-critical. Ini menampilkan peringatan dengan alasan operasi mempengaruhi kinerja sebagai berikut:
Warning | Description |
---|---|
Animation.DestroyAnimationClip Animation.AddClip Animation.RemoveClip Animation.Clone Animation.Deactivate |
Menunjukkan bahwa Rebuild InternState telah dipicu. Rebuild InternState adalah operasi yang melalui daftar kurva untuk setiap klip di komponen Animasi, dan kemudian rebinds setiap kurva untuk nilai pada komponen, pada GameObject. Ini adalah operasi intensif sumber daya, sehingga Anda harus menghindari memanggil metode ini pada runtime sebanyak mungkin. |
AssetBundle.asset/allAssets | Menunjukkan bahwa Unity disebut AssetBundleRequest. Sitemap Aset API sementara pemuatan AssetBundle tidak lengkap (AssetBundleRequest. isDone adalah palsu). Ini menyebabkan kios pada benang utama dan menunggu operasi pemuatan selesai. |
AsyncUploadManager.AsyncBufferResized AsyncUploadManager.AsyncBufferDelete |
Menunjukkan bahwa penyangga internal untuk mengunggah data ke GPU diubah karena tidak cukup besar. Resizing ini lambat dan menyebabkan lonjakan dalam aktivitas CPU. Anda dapat menghindari peringatan ini jika Anda dapat mengambil memori untuk mengalokasikan ukuran yang lebih besar di depan. Anda dapat menggunakan pengaturan Async Upload Buffer Size pada Pengaturan kualitas untuk mengatur ukuran default. The AsyncUploadManager.AsyncBufferResized marker menunjukkan ukuran baru dialokasikan yang dapat Anda gunakan sebagai panduan untuk ukuran penyangga default. |
Rigidbody.SetKinematic | Membuat non-convex MeshCollider untuk kaku. |