Comment rapidement à zéro, un tableau?
Je suis actuellement en train de le faire dans une boucle for, et je sais que dans C il y a le ZeroMemory API, mais qui ne semble pas être disponible en C#. Ni le peu d'équivalent.remplir de Java existent pas non plus. Je me demandais simplement si il est plus facile/moyen plus rapide?
- Vous n'avez pas besoin de le vider lors de l'initialisation. Votre post n'indique pas si c'est lors de l'initialisation ou après que vous avez mis les données dans le tableau.
- Après j'ai mis les données dans le tableau.
- Dustin: je pense que c'est plutôt impoli de dis-moi juste une recherche google aurait travaillé. Évidemment, mon esprit est différente de la vôtre, et un coup d'oeil par le biais de "zéro de la mémoire en c#" ne pas céder m'Tableau.Clear()
Vous devez vous connecter pour publier un commentaire.
Essayer Tableau.Clear():
C++:
memset(array, 0, array_length_in_bytes);
C++11:
array.fill(0);
C#:
Array.Clear(array, startingIndex, length);
Java:
Arrays.fill(array, value);
memset
en C++ en faveur du C++std::fill
. Lememset
généralement dans le code optimisé devient un appel à la bibliothèquememset
, tandis questd::fill
devient juste quelques instructions de montage, sans un appel à tous.Plusieurs personnes ont posté des réponses, puis supprimé, en disant que dans n'importe quelle langue d'une boucle for sera tout aussi performant qu'un memset ou FillMemory ou quoi que ce soit.
Par exemple, un compilateur peut morceau en 64 bits alignés morceaux de profiter de 64 bits à zéro d'attribution de l'instruction, si disponible. Il va prendre de l'alignement et de choses en considération. Memset de la mise en œuvre est certainement pas anodin.
un memset.asm. Voir aussi memset-is-faster-than-simple-loop.html.
Ne jamais sous-estimer l'infini fourberie de compilateur et de la bibliothèque standard écrivains.
Mise à JOUR
Basé sur la référence concernant
Array.Clear()
etarray[x] = default(T)
de performance, nous pouvons affirmer qu'il y a deux grands cas de être considérés lors de la réinitialisation d'un tableau:A) Il y a un tableau qui est 1..76 articles de long;
B) Il y a un tableau qui est 77 ou plusieurs éléments à long.
De sorte que le orange ligne sur le tracé représente
Array.Clear()
approche.La bleu ligne sur le tracé représente
array[x] = default(T)
approche (itération sur le tableau et la définition de ses valeursdefault(T)
).Vous pouvez écrire une fois de l'aide pour faire ce travail, comme ceci:
Utilisation:
Array.Clear
. Voir Cas.L'appel de la méthode par l'aide de la dll d'importation.Rapide et facile à utiliser 🙂
c est la valeur que vous voulez dans la mémoire
OU
seul le tableau donné à zéro