Rapide Générateur Aléatoire
Comment puis-je faire un rapide RNG (Générateur de nombres Aléatoires en C# qui prennent en charge le remplissage d'un tableau d'octets avec un maxValue (et/ou un minValue)?
J'ai trouvé cette http://www.codeproject.com/KB/cs/fastrandom.aspx mais qui n'ont pas ces caractéristiques.
- Est Système.Aléatoire trop lent ?
- Il peut très bien être. Il remplit octets, ce qui est un cas assez spécial. Code visant à combler octets pourrait probablement être un ordre de grandeur plus rapide ou plus. Qu'il n'a besoin que de la vitesse? Je ne sais pas.
- Oui, Le Système.Le hasard est trop lent. J'ai beaucoup de nombres aléatoires pour générer.
Vous devez vous connecter pour publier un commentaire.
Le fait que vous êtes octets de remplissage avec des entiers est suffisamment différent de l'utilisation typique de cas pour le Système.Aléatoires que vous pouvez probablement battre le mal si vous en avez vraiment besoin.
Système.Le hasard est faite pour un usage général. (En fait, j'ai l'habitude de trouver le système aléatoire routines ennuyant quand je fais de la vitesse et de la distribution des tests sur eux). Il ya des cas où vous auriez envie d'autre chose. Mais vous devez être très explicite au sujet de vos besoins. À quelle vitesse? De quoi êtes-vous prêt à abandonner?
Si vous avez vraiment besoin de "rapide", Marsaglia a produit un certain nombre de très rapide des générateurs de nombres aléatoires qui pourraient être adaptées à vos besoins. Voici quelques liens à propos de l'un d'eux, Xorshift:
Le dernier aborde le fait que vous ciblez octets.
J'ai seulement besoin de super rapide randoms à quelques reprises. Dans la console de jeux avec des processeurs lents où le hasard pourrait faire la différence entre frapper le taux de trame de la cible et de ne pas la frapper. Quelle est votre cas? Par tous les moyens, de l'utilisation du Système.Hasard si vous pouvez.
Ou, adapter la routine vous lier à votre question (qui affirme l'auteur est 8x la vitesse du Système.Aléatoire.)
Système.Le hasard est assez rapide pour n'importe quelle utilisation typique. Si vous rencontrez des problèmes de performances avec le code qui contient le Système.Aléatoire des appels, assurez-vous que vous le profil de votre code avant essayer de construire une nouvelle Aléatoire. Les Chances sont de votre les problèmes de performances ne sont pas dans le cadre, mais plutôt dans votre propre code.
Si vous appelez au Hasard dans une boucle, assurez-vous que vous n'êtes pas la création d'une nouvelle instance Aléatoire à chaque itération, mais au lieu de re-à l'aide d'une instance Aléatoire. Cela permettra d'améliorer les performances, car vous n'êtes pas la création de nouveaux objets pour la GC pour nettoyer, et permettra également d'améliorer la qualité de nombres aléatoires générés.
Si vous avez un générateur de nombre aléatoire qui renvoie les numéros à partir de l'unité de l'intervalle, comme dans le Projet de Code de l'article que vous avez mentionné, vous pouvez d'abord générer une valeur
u
à l'aide de ce générateur, puis retoura + (b-a)*u
pour obtenir des valeurs entre a et b.utiliser les services cryptographiques....
bien sûr, cela ne satisfait l'octet de la zone exigence...
Vous pouvez utiliser Réflecteur de décompiler Système.Aléatoire en C#. Que serait vous donner le code C# de rapide de générateur de nombre aléatoire qui répond à vos exigences.