相关疑难解决方法(0)

简单证明GUID不是唯一的

我想证明一个GUID在一个简单的测试程序中并不是唯一的.我希望以下代码运行几个小时,但它不起作用.我怎样才能使它工作?

BigInteger begin = new BigInteger((long)0);
BigInteger end = new BigInteger("340282366920938463463374607431768211456",10);  //2^128
for(begin; begin<end; begin++)
  Console.WriteLine(System.Guid.NewGuid().ToString());
Run Code Online (Sandbox Code Playgroud)

我正在使用C#.

c# guid

323
推荐指数
21
解决办法
26万
查看次数

System.Guid.NewGuid()是如何随机的?

我知道这可能听起来像一个毫无意义的问题,但是听我说...

我基本上想知道我是否可以信任GUID来生成一个在100%的时间内都是唯一且无法预测的值.

我基本上是在网站的登录系统上滚动,并想知道GUID是否足够安全用于会话cookie.

在评估答案时,将非常感谢有关如何生成GUID的任何背景知识.

感谢您提供重复问题的链接,但我的问题仅针对.Net框架.

.net random guid

48
推荐指数
3
解决办法
3万
查看次数

Guid.NewGuid()返回重复?

我们有一个应用程序为我们的某个服务生成模拟数据以进行测试.每个数据项都有一个唯一的Guid.但是,当我们在对模拟器进行一些次要代码更改后运行测试时,它生成的所有对象都具有相同的Guid.

创建了一个数据对象,然后是一个for循环,其中对象的属性被修改,包括一个新的唯一Guid,它通过远程处理发送到服务(可序列化,而不是编组,如果这就是你'思考),循环再做,等等.

如果我们在循环内部放置一个小的Thread.Sleep(...),它会生成唯一的id.我认为这是一个红鲱鱼.我创建了一个测试应用程序,它刚刚创建了一个guid,并没有得到一个副本.

我的理论是IL的优化方式导致了这种行为.但足够我的理论.你怎么看?我愿意接受测试的建议和方法.

更新:我的问题似乎有很多混乱,所以让我澄清一下.我不认为NewGuid()被破坏了.显然它有效.没关系!但是某处有一个bug会导致NewGuid():1)在我的循环中只调用一次2)在我的循环中每次调用但只分配一次3)其他我没想过的东西

这个bug可能出现在我的代码中(可能是MOST)或者在某个地方进行优化.

所以重申我的问题,我应该如何调试这个场景?

(谢谢你的精彩讨论,这真的帮助我澄清了我心中的问题)

更新#2:我想发布一个显示问题的例子,但那是我问题的一部分.我不能在整套应用程序(客户端和服务器)之外复制它.

这是一个相关的片段:

OrderTicket ticket = new OrderTicket(... );

for( int i = 0; i < _numOrders; i++ )
{
    ticket.CacheId = Guid.NewGuid();
    Submit( ticket );  // note that this simply makes a remoting call
}
Run Code Online (Sandbox Code Playgroud)

c# guid

10
推荐指数
2
解决办法
2万
查看次数

这会导致多个相同的GUID吗?

由于GUID生成是时间相关的,如果在不同线程上的同一时刻多次调用System.Guid.NewGuid(),它是否可以返回相同的GUID?

c# guid collision

8
推荐指数
2
解决办法
1667
查看次数

标签 统计

guid ×4

c# ×3

.net ×1

collision ×1

random ×1