ParalelForTransform
Multiplayer dan Jaringan

C# Kiat Sistem Pekerjaan dan pemecahan masalah

Saat menggunakan Sistem Kerja Unity C#, pastikan Anda mematuhi berikut:

Jangan mengakses data statis dari pekerjaan

Mengakses data statis dari tempat kerja semua sistem keamanan. Jika Anda mengakses data yang salah, Anda mungkin crash Unity, sering dengan cara yang tidak terduga. Misalnya, mengakses MonoBehaviour dapat menyebabkan crash pada reload domain.

Note: Karena risiko ini, versi masa depan Unity akan mencegah akses variabel global dari pekerjaan yang menggunakan Analisis statis. Jika Anda mengakses data statis dalam pekerjaan, Anda harus mengharapkan kode Anda untuk memecahkan versi Unity masa depan.

Flush scheduled batches

Ketika Anda ingin pekerjaan Anda untuk memulai executing, maka Anda dapat membilas batch dijadwalkan dengan JobHandle.ScheduleBatchedJobs. Perhatikan bahwa memanggil metode ini dapat mempengaruhi kinerja negatif. Tidak menyiram batch menunda penjadwalan sampai benang kontrol menunggu hasilnya. Dalam semua kasus lain menggunakan JobHandle.Complete untuk memulai proses eksekusi.

Note: Dalam (ECS) batch disengaja untuk Anda, sehingga memanggil JobHandle.ScheduleBatchedJobs tidak diperlukan.

Jangan mencoba untuk memperbarui konten NativeContainer

Karena kekurangan ref kembali, tidak mungkin untuk secara langsung mengubah konten NativeContainer. Sebagai contoh, nativeArray[0]++; adalah sama seperti menulis var temp = nativeArray[0]; temp++; yang tidak memperbarui nilai dalam nativeArray.

Sebaliknya, Anda harus menyalin data dari indeks ke salinan sementara setempat, memodifikasi salinan itu, dan menyimpannya kembali, seperti:

MyStruct temp = myNativeArray[i];
temp.memberVariable = 0;
myNativeArray[i] = temp;

Sitemap Kepemilikan regain

Memperkuat kepemilikan data memerlukan ketergantungan untuk menyelesaikan sebelum benang kontrol dapat menggunakannya lagi. Tidak cukup untuk memeriksa JobHandle.IsCompleted. Anda harus memanggil metode JobHandle.Complete untuk mendapatkan kembali kepemilikan jenis NativeContainer ke benang kontrol. Memanggil Complete juga membersihkan keadaan dalam sistem keamanan. Tidak melakukannya memperkenalkan kebocoran memori. Proses ini juga berlaku jika Anda menjadwalkan pekerjaan baru setiap bingkai yang memiliki ketergantungan pada pekerjaan bingkai sebelumnya.

Gunakan Jadwal dan Lengkap di benang kontrol

Anda hanya dapat memanggil Schedule dan Complete dari benang kontrol yang sama. Jika satu pekerjaan tergantung pada yang lain, gunakan JobHandle untuk mengelola ketergantungan daripada mencoba untuk menjadwalkan pekerjaan dalam pekerjaan.

Gunakan Jadwal dan Lengkap pada waktu yang tepat

Call Schedule pada pekerjaan segera setelah Anda memiliki data yang dibutuhkan, dan jangan sebut Complete di atasnya sampai Anda membutuhkan hasilnya. Ini adalah praktik yang baik untuk menjadwalkan pekerjaan yang Anda tidak perlu menunggu ketika tidak bersaing dengan pekerjaan lain yang berjalan. Misalnya, jika Anda memiliki periode antara akhir satu bingkai dan awal bingkai berikutnya di mana tidak ada pekerjaan yang berjalan, dan satu latency bingkai dapat diterima, Anda dapat menjadwalkan pekerjaan ke ujung bingkai dan menggunakan hasilnya dalam bingkai berikut. Atau, jika permainan Anda disatukan bahwa periode perubahan dengan pekerjaan lain, dan ada periode yang dimanfaatkan besar di suatu tempat lain dalam bingkai, lebih efisien untuk menjadwalkan pekerjaan Anda di sana.

Mark NativeContainer jenis sebagai read-only

Ingat bahwa pekerjaan telah membaca dan menulis akses ke jenis NativeContainer secara default. Gunakan atribut [ReadOnly] ketika tepat untuk meningkatkan kinerja.

Periksa ketergantungan data

Di jendela Unity 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
, penanda "WaitForJobGroup" pada benang kontrol menunjukkan bahwa Unity menunggu pekerjaan pada benang pekerja untuk menyelesaikan. Penanda ini bisa berarti bahwa Anda telah memperkenalkan ketergantungan data di suatu tempat yang harus Anda hadapi. Cari tahu JobHandle.Complete untuk melacak di mana Anda memiliki ketergantungan data yang memaksakan benang kontrol untuk menunggu.

Pekerjaan debugging

Pekerjaan memiliki fungsi Run yang dapat Anda gunakan di tempat Schedule untuk segera melaksanakan pekerjaan pada benang kontrol. Anda dapat menggunakan ini untuk tujuan debugging.

Jangan mengalokasikan memori yang dikelola dalam pekerjaan

Mengalokasikan memori yang dikelola dalam pekerjaan sangat lambat, dan pekerjaan tidak dapat menggunakan Unity Burst compiler untuk meningkatkan kinerja. Burst adalah teknologi kompilator backend berbasis LLVM baru yang memudahkan Anda. Dibutuhkan C# pekerjaan dan menghasilkan kode mesin yang sangat dioptimalkan memanfaatkan kemampuan khusus platform Anda.

Informasi lebih lanjut

  • Lihat daftar putar Unity GDC 2018: C# Sistem Kerja.
  • Untuk informasi lebih lanjut tentang bagaimana Sistem Kerja C# berkaitan dengan ECS, lihat .
  • Untuk diskusi lebih lanjut dan pemecahan masalah, lihat .

  • 2018–06–15 Sitemap

  • Sistem Kerja C# terkena Oktober 2018

ParalelForTransform
Multiplayer dan Jaringan