Переменная Stati c, используемая несколькими исполняемыми файлами? - PullRequest
0 голосов
/ 21 января 2020

Я создал приложение с переменной c (случайное число, сгенерированное во время выполнения). скопировал .exe в три папки и запустил его. значение stati c представляется общим (одинаковым) во всех трех.

Это ожидаемое?

Ответы [ 3 ]

0 голосов
/ 21 января 2020

Этот пост скрыт. Вы удалили это сообщение через 10 секунд go. да, это ожидаемо переменная stati c будет принимать значение из «генератора чисел» в первый раз, затем, когда эта переменная имеет значение, она никогда не получит значение из генератора в следующий раз, она вернет сохраненное в ней значение. поэтому лучше использовать метод stati c вместо переменной для генерации новых значений.

примечание: как не многократный работающий exe

давайте предположим, что у нас есть этот класс, который имеет переменную stati c и метод stati c:

 public class StaticTest
        {
            static public int RandomNumber=GenerateRandomNumber();
            static public int GenerateRandomNumber()
            {
                Random rnd = new Random();
                int temp = rnd.Next();
                return temp;
            }
        }

, и вы можете проверить его, вызвав его из другого класса, и посмотреть результат:

    int TempVariable1 =StaticTest.RandomNumber;

    int TempVariable2= StaticTest.RandomNumber;

    int TempMethod1 = StaticTest.GenerateRandomNumber();

    int TempMethod2 = StaticTest.GenerateRandomNumber();

    System.Console.WriteLine("TempVariable1 = {0}", TempVariable1);
    System.Console.WriteLine("TempVariable2 = {0}", TempVariable2);
    System.Console.WriteLine("TempMethod1 = {0}", TempMethod1);
    System.Console.WriteLine("TempMethod2 = {0}", TempMethod2);

результат будет следующим:

        TempVariable1   1936885472  int
        TempVariable2   1936885472  int
        TempMethod1     1887921393  int
        TempMethod2     2129299766  int
0 голосов
/ 22 января 2020

Я думаю, что Генератор случайных чисел генерирует то же число. Вот почему я получаю ту же ценность. Приведенный ниже пример кода и полученное письмо. У меня есть еженедельная работа, но число повторяется все недели. : (

Действия по воспроизведению:

  1. Создание приведенного ниже кода в режиме выпуска.

  2. Копирование в 3 папки bin1, bin2, bin3

  3. Создайте три задания планировщика заданий для трех решений.

  4. Выберите три задания заданий вместе и выполняйте вместе.

с использованием System;

с использованием System.Collections.Generic;

с использованием System.IO;

с использованием System.Linq;

с использованием System. Net .Mail;

с использованием System.Text;

с использованием System.Threading;

пространство имен XXX.HistoryExtractor {publi c class Test {publi c stati c String RandomNum1;

    /// <summary>
    /// Start method for Job
    /// </summary>
    /// <param name="args"></param>
    public static void Main(string[] args)
    {

        RandomNum1 = new Random().Next(9999).ToString() + " ";
        MailHandler2 mh = new MailHandler2();
        mh.SendJobStartUpdate();
    }

}

public class MailHandler2
{
    String RandomNum;

    public MailHandler2()
    {
        //Thread.Sleep(1000);
        RandomNum = new Random().Next(9999).ToString() + " ";
    }

    public void SendJobStartUpdate()
    {
        try
        {

            var mail = new MailMessage();
            mail.To.Add("lijo.john@urmail.com");

            mail.Subject = "Job  Started " + RandomNum + "  -  " + DateTime.Now;
            mail.Body = "<br/>Job  Started...";
            mail.IsBodyHtml = true;

            using (var smtp = new SmtpClient())
            {
                try
                {
                    smtp.Send(mail);
                }
                catch (Exception c)
                {
                    throw c;
                }
            }

        }
        catch (FormatException eF)
        {

        }

    }

}

}

См. набор писем, которые я получил, и случайное число дублируется.

От субъекта получено Категории размера
noreply@mailserver.com Задание запущено 6887 - 22.01.2020 12:42:55 11:13 41 KB
noreply@mailserver.com Задание запущено 6887 - 22.01.2020 12:42:55 11:13 40 KB
noreply@mailserver.com Job St arted 4936 - 22.01.2020, 12:42:55, 11:13 41 КБ

====================

Из полученной темы Размер категории
noreply@mailserver.com Задание запущено 7953 - 22.01.2020 12:41:16 11:11 41 КБ
noreply@mailserver.com Задание запущено 6001 - 1 / 22/2020 12:41:16 11:11 41 КБ
noreply@mailserver.com Работа запущена 7953 - 22.01.2020 12:41:16 11:11 41 КБ

=============================== Из предметных категорий полученных размеров
noreply@mailserver.com Задание запущено 1420 - 1 / 22/2020 12:41:08 11:11 41 КБ
noreply@mailserver.com Работа запущена 5280 - 22.01.2020 12:41:05 11:11 41 КБ
noreply@mailserver.com Работа запущена 5280 - 22.01.2020, 12:41:05, 11:11 41 КБ

0 голосов
/ 21 января 2020

Я не думаю, что в этом случае память используется совместно, если только вы не сделали это случайно.

Однако новый Radom () эквивалентен произнесению new Random (DateTime.Now.Millisecond) , Если вы запустите 3 программы за одну и ту же миллисекунду (что, как мне кажется, не просто возможно, но вероятно, если это будет сделано с помощью кода), или если вы жестко закодировали новый Random (то же самое int каждый раз), ваши случайные броски будут одинаковыми во всех случаях. все ваши программы, если вы катитесь в пределах одного диапазона ie. 0-5 как d ie или что-то.

...