[英]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
我认为随机数生成器生成相同的数字。 这就是我获得相同价值的原因。 下面是我做的代码示例和我收到的邮件。 我每周都有工作,但这个数字整周都在重复。 :(
重现步骤:
在发布模式下构建以下代码。
复制到3个文件夹bin1、bin2、bin3
为三个解决方案创建三个任务调度程序作业。
一起选择三个任务作业,一起运行。
使用系统;
使用 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.