Dalam usaha untuk meningkatkan kecekapan menyalin berbilang tatasusunan ke dalam tatasusunan tiga dimensi tunggal, pembangun menghadapi masalah prestasi apabila melaksanakan kod berikut:
for (int i = 0; i < sortedIndex.Length; i++) { if (i < num_in_left) { // add instance to the left child leftnode[i, 0] = sortedIndex[i]; leftnode[i, 1] = sortedInstances[i]; leftnode[i, 2] = sortedLabels[i]; } else { // add instance to the right child rightnode[i-num_in_left, 0] = sortedIndex[i]; rightnode[i-num_in_left, 1] = sortedInstances[i]; rightnode[i-num_in_left, 2] = sortedLabels[i]; } }
Untuk menangani kebimbangan prestasi, Buffer.BlockCopy telah diperkenalkan sebagai alternatif yang lebih pantas. Tujuan utamanya adalah untuk memudahkan operasi berkelajuan tinggi, seperti yang dinyatakan dalam dokumentasi:
Kelas ini menyediakan prestasi yang lebih baik untuk memanipulasi jenis primitif daripada kaedah serupa dalam kelas System.Array.
Buffer. BlockCopy mampu beroperasi pada tatasusunan berbilang dimensi. Untuk memastikan prestasi optimum, adalah penting untuk menentukan bilangan bait untuk disalin dan bukannya bilangan elemen dan untuk berfungsi dengan tatasusunan primitif.
Sebagai tindak balas kepada soalan yang dikemas kini, yang bertujuan untuk menggabungkan tiga tatasusunan 1D ke dalam tatasusunan 3D, sihir berikut boleh digunakan:
double[] sortedIndex, sortedInstances, sortedLabels; // copy them over to a 3d array double[] leftnode = new double[sortedIndex.Length, 3]; // magic happens here leftnode = {sortedIndex, sortedInstances, sortedLabels};
Untuk menentukan pendekatan optimum, ujian penandaarasan dijalankan menggunakan tiga kaedah: Array.Copy, Buffer.BlockCopy dan Buffer.memcpyimpl. Keputusan menunjukkan bahawa kaedah tersebut sangat kompetitif, dengan Buffer.memcpyimpl secara amnya adalah yang terpantas. Walau bagaimanapun, perbezaan prestasi adalah kecil, menjadikannya tidak perlu terlalu menumpukan pada memilih satu kaedah berbanding yang lain.
Atas ialah kandungan terperinci Bagaimanakah Buffer.BlockCopy Boleh Meningkatkan Prestasi Apabila Menyalin Berbilang Tatasusunan ke dalam Tatasusunan 3D dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!