我想问一下在.NET Compact Framework下如何生成随机GUID和随机数?我的印象是他们正在使用时钟来产生随机性,但我做了一些实验,似乎并没有使用时钟来产生随机性。这是我使用的代码。
Random r = new Random();
string strGuid = Guid.NewGuid().ToString();
int intRandom = r.Next();
DateTime dt = DateTime.Now;
我在运行.NET compact framework 2.0的设备上运行了4次。 (每次测试间隔超过10秒)。我也为这个实验做了一些不可想象的事情:在最后两次测试中,我取消了RTC上晶体振荡器32.768KHz的连接,故意冻结时间,看它是否仍能产生随机性(我移除了RTC,焊接和放置它们位于带跳线和短线的空白PCB板上。注意:我相信,由于移除了RTC上的晶体振荡器,您无法在仿真器或PC端重现这一点。
测试1
dt {1/8/2016 10:41:14 AM} System.DateTime
intRandom 765865814 int
strGuid“63c6117b-9529-427f-822c-1ebc51089b5b”string
测试2
dt {1/8/2016 10:47:19 AM} System.DateTime
intRandom 203285329 int
strGuid“2f84ca06-497d-4457-9def-1cf59abb4ca0”string
测试3
dt {1/8/2016 10:47:52 AM} System.DateTime
intRandom 1935598076 int
strGuid“5ea1fe9e-0059-4bdb-b3ad-e1197e4b8d9e”string
测试4
dt {1/8/2016 10:47:52 AM} System.DateTime
intRandom 1481224450 int
strGuid“4123b229-998c-4aeb-b90c-dd64db145b23”string
在测试1中,晶体振荡器仍然连接。到目前为止一切正常。
在测试2中,晶体振荡器仍然连接。日期时间正在移动。到目前为止,一切都好。在此测试之后,晶体振荡器的连接被移除。到目前为止一切正常。
在测试3中,在开始测试之前断开晶体振荡器。到目前为止一切都还可以,但要注意时间。
在测试4上,正如预期的那样,由于去除了与晶体振荡器的连接,时间戳与测试3相同。但生成的GUID和随机数仍然是随机的。
我已经重复了这个实验3次,以确保我没有做错任何事。有了这个,尽管时钟停止了,GUID和随机数如何仍然是随机的?