Paling sering, cara terbaik untuk mendapatkan kinerja adalah dengan mengubah algoritma Anda. Semakin tidak umum implementasinya, semakin dekat Anda dengan logam.
Dengan asumsi bahwa telah dilakukan ....
Jika benar-benar kode kritis, cobalah untuk menghindari pembacaan memori, cobalah untuk menghindari menghitung hal-hal yang dapat dihitung sebelumnya (meskipun tidak ada tabel pencarian karena mereka melanggar aturan nomor 1). Ketahuilah apa yang dilakukan oleh algoritma Anda dan tulislah dengan cara yang juga diketahui oleh kompiler. Periksa unit untuk memastikannya.
Hindari kesalahan cache. Proses batch sebanyak yang Anda bisa. Hindari fungsi virtual dan tipuan lainnya.
Pada akhirnya, ukur semuanya. Aturan berubah sepanjang waktu. Apa yang digunakan untuk mempercepat kode 3 tahun yang lalu sekarang memperlambatnya. Contoh yang bagus adalah 'gunakan fungsi matematika ganda alih-alih versi float'. Saya tidak akan menyadarinya jika saya tidak membacanya.
Saya lupa - tidak memiliki konstruktor default menginternalisasi variabel Anda, atau jika Anda bersikeras, setidaknya juga buat konstruktor yang tidak. Waspadai hal-hal yang tidak muncul di profil. Ketika Anda kehilangan satu siklus yang tidak perlu per baris kode, tidak ada yang akan muncul di profiler Anda, tetapi Anda akan kehilangan banyak siklus secara keseluruhan. Sekali lagi, ketahuilah apa yang dilakukan kode Anda. Jadikan fungsi inti Anda lebih ramping, bukan sangat mudah. Versi foolproof dapat dipanggil jika diperlukan, tetapi tidak selalu diperlukan. Fleksibilitas datang dengan harga - kinerja menjadi satu.
Diedit untuk menjelaskan mengapa tidak ada inisialisasi default: Banyak kode mengatakan: Vector3 bla; bla = DoSomething ();
Intialisasi dalam konstruktor adalah waktu yang terbuang. Juga, dalam hal ini waktu yang terbuang adalah kecil (mungkin membersihkan vektor), namun jika programmer Anda melakukan ini biasanya bertambah. Juga, banyak fungsi membuat sementara (pikirkan operator kelebihan beban), yang akan diinisialisasi ke nol dan ditugaskan setelah langsung. Tersembunyi siklus yang hilang yang terlalu kecil untuk melihat lonjakan profiler Anda, tetapi siklus berdarah seluruh basis kode Anda. Juga, beberapa orang melakukan lebih banyak hal dalam konstruktor (yang jelas tidak boleh). Saya telah melihat keuntungan multi-milidetik dari variabel yang tidak digunakan di mana konstruktor kebetulan berada di sisi yang berat. Segera setelah konstruktor menyebabkan efek samping, kompiler tidak akan dapat memperbaikinya, jadi kecuali Anda tidak pernah menggunakan kode di atas, saya lebih suka konstruktor yang tidak menginisialisasi, atau, seperti yang saya katakan,
Vector3 bla (noInit); bla = doSomething ();