[英]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.