La copie de tableaux en C# est-elle plus rapide avec Buffer.BlockCopy ?
En C#, il existe plusieurs façons de copier des tableaux, chacune avec des performances variables . Une méthode courante est la copie en boucle, comme le montre l'exemple de code à performances lentes fourni. Cependant, pour des performances plus rapides, Buffer.BlockCopy peut être utilisé.
Buffer.BlockCopy pour la copie de tableaux
Buffer.BlockCopy est spécialement conçu pour une manipulation efficace des types primitifs. Sa fonction principale est de copier un nombre spécifié d'octets d'une source vers une destination, optimisant ainsi les performances. Contrairement aux méthodes d'Array, telles que Array.Copy, qui opèrent sur des éléments, Buffer.BlockCopy copie directement les octets pour une vitesse maximale.
Application de Buffer.BlockCopy au problème
Pour implémenter Buffer.BlockCopy dans le code fourni, les modifications suivantes peuvent être made :
for (int i = 0; i < sortedIndex.Length; i++) { Buffer.BlockCopy(sortedIndex, i * sizeof(double), leftnode, i * 3 * sizeof(double), sizeof(double)); Buffer.BlockCopy(sortedInstances, i * sizeof(double), leftnode, (i * 3 + 1) * sizeof(double), sizeof(double)); Buffer.BlockCopy(sortedLabels, i * sizeof(double), leftnode, (i * 3 + 2) * sizeof(double), sizeof(double)); }
En copiant directement les valeurs primitives sous forme de blocs d'octets, le code exploite les capacités optimisées de gestion de la mémoire de Buffer.BlockCopy.
Option avancée : System.Buffer. memcpyimpl
Pour des performances potentiellement supérieures, envisagez de lier un délégué à System.Buffer.memcpyimpl. Cette méthode fournit la fonction de copie de mémoire de niveau le plus bas dans le framework .NET. Cependant, il nécessite des pointeurs et peut ne pas offrir de gains de vitesse supplémentaires significatifs par rapport à Buffer.BlockCopy.
Résultats de l'analyse comparative
Les tests de référence montrent que Buffer.BlockCopy est systématiquement plus rapide que Array. .Copy, tandis que System.Buffer.memcpyimpl offre des performances légèrement supérieures dans certains cas. Toutefois, la différence de vitesse n’est pas considérable. En général, Buffer.BlockCopy offre une solution simple et efficace pour une copie rapide de tableaux.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!