繁体   English   中英

在多个运行的 exe 之间共享静态变量?

[英]Static variable shared among multiple running exe?

我创建了一个带有静态变量(运行时生成的随机数)的应用程序。 将.exe复制到三个文件夹并运行它。 静态值似乎在所有三个中共享(相同)。

这是预期的吗?

我不认为在这种情况下内存是共享的,除非你无意中这样做了。

然而,new Radom() 相当于说 new Random(DateTime.Now.Millisecond)。 如果你在同一毫秒内运行这 3 个程序(相信我这不仅是可能的,但如果通过代码来做的话),或者如果你硬编码了新的随机(每次都是相同的 int),你的随机滚动将是相同的如果您在同一范围内滚动,则所有程序。 0-5 喜欢死什么的。

是的,这是意料之中的。 静态变量第一次会从“数字生成器”中取值,然后当这个变量有值时它不会在下次从生成器中取值,它会返回其中存储的值。 所以最好使用静态方法而不是变量来生成新值。

注意:因为不是多个运行的 exe

假设我们有一个具有静态变量和静态方法的类:

 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

我认为随机数生成器生成相同的数字。 这就是我获得相同价值的原因。 下面是我做的代码示例和我收到的邮件。 我每周都有工作,但这个数字整周都在重复。 :(

重现步骤:

  1. 在发布模式下构建以下代码。

  2. 复制到3个文件夹bin1、bin2、bin3

  3. 为三个解决方案创建三个任务调度程序作业。

  4. 一起选择三个任务作业,一起运行。

使用系统;

使用 System.Collections.Generic;

使用 System.IO;

使用 System.Linq;

使用 System.Net.Mail;

使用系统文本;

使用系统线程;

命名空间 XXX.HistoryExtractor { 公共类测试 { public static 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)
        {

        }

    }

}

}

查看我收到的一组邮件,随机 nuber 被复制。

从主题收到的大小类别
noreply@mailserver.com 工作开始6887 - 1/22/2020 12:42:55 AM 11:13 41 KB
noreply@mailserver.com 工作开始6887 - 1/22/2020 12:42:55 AM 11:13 40 KB
noreply@mailserver.com 工作开始 4936 - 1/22/2020 12:42:55 AM 11:13 41 KB

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

从主题收到的大小类别
noreply@mailserver.com 工作开始7953 - 1/22/2020 12:41:16 AM 11:11 41 KB
noreply@mailserver.com 工作开始 6001 - 1/22/2020 12:41:16 AM 11:11 41 KB
noreply@mailserver.com 工作开始7953 - 1/22/2020 12:41:16 AM 11:11 41 KB

=============================== 来自主题收到的大小类别
noreply@mailserver.com 工作开始时间 1420 - 1/22/2020 12:41:08 AM 11:11 41 KB
noreply@mailserver.com 工作开始5280 - 1/22/2020 12:41:05 AM 11:11 41 KB
noreply@mailserver.com 工作开始5280 - 1/22/2020 12:41:05 AM 11:11 41 KB

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM