|
|
1
5
除非有什么原因你不能,否则你应该考虑使用 GUID 每条评论:您可以使用GUID和64位 FNV hash 和使用 XOR-folding 使您的结果在59位以内。不像GUID那样防碰撞,但比现有的要好。 |
|
|
2
7
你不想 随机 数字。我支持@JP。我认为你应该考虑使用GUID作为你的消息ID。 编辑
|
|
|
3
3
这基本上将Guid转换为int。理论上你可以得到重复的Guid,但这在很大程度上是不可能的。
在Windows编程中,以远远超出计时器实际精度的单位指定计时器的分辨率是很常见的(我第一次在Visual Basic 3.0的计时器控制中遇到这个问题,它以毫秒为单位设置,但实际上每秒只关闭18次)。我不确定,但我敢打赌,如果你只是运行一个循环并打印出DateTime。现在。Ticks,你会看到这些值以大约15ms的间隔量化。因此,有4个进程在运行,实际上很可能其中两个进程最终会在Random函数中使用完全相同的种子。
如果你想担心不太可能发生的大规模事件,买彩票吧。 |
|
|
4
3
实现这一点的另一种方法是不使用Random类,因为它充满了这样的问题。您可以使用System中提供的加密质量随机数生成器来实现相同的功能(随机18位数字)。安全。密码学。 我已经修改了您的代码,使用RNGCryptoServiceProvider类来生成id。
|
|
|
5
1
是的,它可能会发生,因此它确实发生了。 您应该在启动时只初始化一次Random。如果您有多个线程同时启动,请获取DateTime的副本。现在。勾选并将其传递给每个具有已知偏移量的线程,以防止在同一时间初始化。 |
|
|
6
0
至于你最初的问题,由于Ticks很长,以下陈述:
将导致溢出。不知道那时会发生什么样的肮脏。.. |