J'ai créé une application avec une variable statique (un nombre aléatoire généré au moment de l'exécution). copié .exe à trois dossiers et couru. La valeur statique semble être partagée (même) dans les trois. P>
est-ce attendu? P>
3 Réponses :
Je ne pense pas que la mémoire soit partagée dans ce cas, à moins que vous ne l'ayez pas fait par accident. P>
Cependant, un nouveau radom () est l'équivalent de dire de nouveaux aléatoires (DateTime.now.milliseconde). Si vous exécutez les 3 programmes dans le même milliseconde (ce qui croit que moi n'est pas simplement possible, mais probablement si vous faites via le code), ou si vous avez du mal à nouveau aléatoire (même Int à chaque fois), vos rouleaux aléatoires seront les mêmes Tous vos programmes si vous roulez dans la même gamme, c'est-à-dire. 0-5 comme la matrice ou quelque chose. P>
Merci Furiddensoul, je suppose que c'est le problème exact.
Oui, c'est attendu. La variable statique prendra la valeur du "générateur de nombres" pour la première fois, puis lorsque cette variable a une valeur, elle ne prendra jamais la valeur du générateur la prochaine fois, il retournera la valeur stockée. Il est donc préférable d'utiliser une méthode statique au lieu d'une variable pour générer de nouvelles valeurs.
Remarque: comme non multiples Exe Exe P> blockQquote>
Supposons que nous ayons cette classe qui a une variable statique et une méthode statique: p>
xxx pré> et vous pouvez le tester en l'appelant à une autre classe et voir la Sortie: p>
xxx pré> Le résultat sera comme suit: p>
TempVariable1 1936885472 int TempVariable2 1936885472 int TempMethod1 1887921393 int TempMethod2 2129299766 int
"Plusieurs exe exécutant?" Je ne sais pas comment votre code démontre un comportement OP observe probablement ...
Ensuite, vous devriez clarifier ce que vous répondez réellement. (J'ai déjà voté sur la question comme "peu claire").
J'ai ajouté: Remarque: comme non multiple Exe Exe
D'accord. Maintenant, nous attendons simplement que OP reviennent et clarifie ce qu'ils signifiaient réellement pour que votre message soit de réponse ou non.
J'ai programmé 3 emplois dans un planificateur de tâches qui exécute EXE à partir d'un emplacement différent. Je peux voir que la valeur statique est la même dans les trois ou dans un autre mot, le troisième exe remplace la valeur statique des premier et second exe.
Je pense que le générateur de nombres aléatoires générant le même nombre. C'est la raison pour laquelle j'ouvre la même valeur. L'échantillon de code ci-dessous que j'ai fait et le courrier que j'ai reçu. J'ai des emplois hebdomadaires, mais le nombre est répété toutes les semaines. : (
Étapes pour reproduire: P>
Construisez le code ci-dessous en mode de sortie. p> li>
Copier sur 3 dossiers BIN1, BIN2, BIN3 P> LI>
Créez trois travaux de planificateur de tâches pour les trois solutions. P> LI>
Sélectionnez trois tâches de tâches ensemble et courez ensemble. P> li> ol>
à l'aide du système; p>
à l'aide de system.collections.generic; p>
à l'aide du système.io; p>
à l'aide de System.Linq; p>
à l'aide de system.net.mail; p>
à l'aide de system.text; p>
à l'aide de System.threading; p>
Espace de noms xxx.historyExtractor
{
Test de la classe publique
{
String statique publique randomnum1; p> } p> Voir l'ensemble des mails que j'ai reçus et que Nuber aléatoire soit dupliqué. P> de sujet Catégories de taille reçues =================================== === p> des catégories de taille reçues de sujet ============ =====================
Des catégories de taille reçues sur le sujet
NOREPLY@MARAIRALVER.com Job a commencé 6887 strong> - 1/22/2020 12:42:55 11:13 41 KB
NOREPLY@MARAIRALVER.com Job a commencé 6887 strong> - 1/22/2020 12:42:55 11:13 40 KB
noreply@mailerver.com Job a commencé 4936 - 1/22/2020 12:42:55 11:13 41 KB P>
NOREPLY@MARALSERVER.com Job a commencé
Noreply@mailServer.com Job a commencé 6001 - 1/22/2020 12:41:16 11:11 41 KB
NOREPLY@MARAIERSERVER.COM JOB COMMENCE
Noreply@mailServer.com Job commencé 1420 - 1/22/2020 12:41:08 11:11 41 KB
NOREPLY@MARAIRALVER.COM Job a commencé
NOREPLY@MARAIRALVER.COM JOB COMMENCE
Avec ce code, vous obtiendrez un nombre aléatoire à chaque fois, si et seulement si, ils commencent à différents moments. Vous n'avez pas non plus de variables statiques ici, donc votre théorie de mémoire partagée est sortie. Vous publiez leurs heures de début et nous pouvons clairement voir que les numéros en double ont commencé sur la même seconde l'autre. Si vous avez simplement besoin d'une chaîne unique et qu'il n'a pas besoin d'être un entier par exemple, vous pouvez utiliser la fonction statique "guid.newguid ()". C'est ce que sont les GUDS pour les identifiants uniques aléatoires. .Tostring () fonctionnera bien sur eux.
corriger. Vous obtiendrez un nombre aléatoire à chaque fois, si et seulement si, ils commencent à différents moments - c'était le problème. Le nombre aléatoire générait le même temps.
Vous exécutez donc 3 exe et tous respectent les changements de la variable statique réalisée dans un seul des execes? C'est très i> difficile à croire (le partage de la pièce de mémoire est réalisable dans une certaine mesure, mais de la question qui ne sonne pas que vous savez comment commencer Mettre en œuvre ce ) ...
Pour clarifier votre question, ajoutez un extrait de code. Merci.
Comment avez-vous construit le
aléatoire code>?
dans la méthode principale randomnum = nouveau aléatoire (). Suivant (9999) .Tostring () +;