Double retourné par un Guid.NewGuid()?

Nous avons une application qui génère des données simulées pour l'un de nos services à des fins de test. Chaque élément de données a un Guid unique. Cependant, lorsque nous avons couru un test après quelques petites modifications au code du simulateur de tous les objets générés par il avait le même Guid.

Il n'y a qu'un seul objet de données créée, puis une boucle où les propriétés de l'objet ont été modifiés, y compris un nouveau Guid unique, et il a été envoyé au service via l'accès distant (serializable, pas maréchal-par-ref, si c'est ce que vous pensez), la boucle et le faire à nouveau, etc.

Si nous avons mis un petit Fil.Le sommeil( ...) à l'intérieur de la boucle, il a généré id unique. Je pense que c'est une diversion. J'ai créé une application de test qui venez de créer un guid après l'autre et ne pas obtenir un seul double.

Ma théorie est qu'IL a été optimisée dans un chemin qui a provoqué ce comportement. Mais assez parlé de mes théories. Qu'en pensez-VOUS? Je suis ouvert aux suggestions et aux façons de le tester.

Mise à JOUR: Il semble y avoir beaucoup de confusion au sujet de ma question, permettez-moi de préciser. Je NE pense PAS que NewGuid() est cassé. Clairement, il fonctionne. Ses BEAUX! Il y a un bug quelque part, cependant, que les causes NewGuid ():
1) être appelé qu'une seule fois dans ma boucle
2) être appelé à chaque fois que dans ma boucle, mais attribuée qu'une seule fois
3) quelque chose d'autre que je n'ai pas pensé

Ce bug peut être dans mon code (le PLUS probable) ou dans l'optimisation de quelque part.

Donc de réitérer ma question, comment dois-je debug ce scénario?

(et merci pour le grand débat, c'est vraiment de m'aider à clarifier le problème dans mon esprit)

Mise à JOUR # 2: j'aimerais poster un exemple qui montre le problème, mais c'est une partie de mon problème. Je ne peux pas les reproduire à l'extérieur de l'ensemble de la suite d'applications (clients et serveurs).

Ici est pertinente extrait de:

OrderTicket ticket = new OrderTicket(... );

for( int i = 0; i < _numOrders; i++ )
{
    ticket.CacheId = Guid.NewGuid();
    Submit( ticket );  //note that this simply makes a remoting call
}
Si vous pensez qu'il y a un bug dans le IL - utiliser un Réflecteur pour le retrouver.
Ah, oui. J'ai pensé que. Mais mon estimation initiale était qu'il serait probablement dans le JIT de l'optimiseur. Ne pouvez pas utiliser un Réflecteur pour que.
Si vous ne pensez pas que c'est un NewGuid bug, puis après un peu de code qui montre le problème. Ou, au moins, poste le code que a la question. Aussi, répondre à la question de savoir si la suppression du Fil.Sommeil provoque le problème réapparaît. Je suis assez bon à psychiques de débogage - mais encore mieux avec quelques détails.
Oui. Le fil du sommeil causés à se comporter correctement, et la suppression il a renvoyé l'erreur. Le compoundage mon problème est que je suis totalement incapable de reproduire le problème en dehors de toute cette suite d'applications.

OriginalL'auteur dviljoen | 2008-11-19