导航
  • 全部
...

C# Guid.NewGuid()生成的GUID重复,怎么解决?

asfadfsf 2019-03-01 11:42:52
接手一个项目,数据库里面使用GUID做主键的,这个GUID是WCF里面代码生成的,但有时会重复。

foreach (var itemRow in orderDT)
{
if (itemRow.RowState == DataRowState.Added)
{
itemRow.OrderID = Guid.NewGuid();
itemRow.EndEdit();
}
}

网上找的解决方案:让数据库自动生成。但我看了下项目,还有其他的也要修改,不想加班。

想问下大牛们有其它办法没?
...全文
给本帖投票
8952 57 打赏 收藏 转发到动态 举报
写回复
用AI写文章
57 条回复
切换为时间正序
请发表友善的回复…
发表回复
葵宇科技 2021-05-23
  • 打赏
  • 举报
回复
循环插入应该会有这样的问题,建议在循环部分加个小sleep,希望能帮到你
morliz子轩 2021-05-15
  • 打赏
  • 举报
回复
它重复,只可能存在两个原因: 1、并发(多线程)执行时生成Guid,导致重复。 2、多线程执行队列逻辑混乱。
闪耀星星 2021-05-15
  • 打赏
  • 举报
回复
重复概率很小
AlphaGroup 2021-05-14
  • 打赏
  • 举报
回复
遇到过,多线程下临界资源使用方法不对造成的。
libolei 2020-12-29
  • 打赏
  • 举报
回复
Thread.Sleep(100);
  • 打赏
  • 举报
回复
这个帖子怎么被挖出来的??楼主肯定都忘了有这个问题吧
w123wxh 2020-12-22
  • 打赏
  • 举报
回复
Guid理论上不重复,用这么久没有遇见过。
duangufei 2020-12-22
  • 打赏
  • 举报
回复
你是不是用了多线程了
叫姐姐姐姐222 2020-12-21
  • 打赏
  • 举报
回复
引用 7 楼 以专业开发人员为伍 的回复:
应该是100年内基本上不会重复(即使是同一台机器上)。仔细调试、测试你的程序吧。
你多开几个线程同时执行 试试。不要太绝对了好不好,在多线程下重复的概率还是比较大,什么都不懂就不要乱说
~小雨 2020-11-03
  • 打赏
  • 举报
回复
我来告诉你吧

foreach。 for 这个东西里面 少执行类似的代码。 不信你可以for或者foreach 10000次。获取一个随机数就明白了。建议你放在外面或者异步执行
  • 打赏
  • 举报
回复
我一开始以为这个丢下坟就跑的lz回来了,后来发现你们考古队在开始分析自己的问题了,不能自己开帖子一定要现场考古吗?
皮皮熊_1989 2019-09-25
  • 打赏
  • 举报
回复
找其他地方,GUID重复,这个基本概率为0;
liangpz 2019-09-12
  • 打赏
  • 举报
回复
同一台机器火力全开多线程同时产生GUID,这个不符合使用GUID的初衷,是有可能参数重复的GUID
liangpz 2019-09-12
  • 打赏
  • 举报
回复
同一台机器单线程运行就不会产生重复的GUID,over!
Nick黄 2019-09-12
  • 打赏
  • 举报
回复 1
楼主也可以参考下上边的问题,不出意外的话,有生之年是看不到GUID真正重复的。
Nick黄 2019-09-12
  • 打赏
  • 举报
回复 1
引用 5 楼 Summer_djz 的回复:
 var list1 = new List<info>();
                info info1=new info();
                for (int i = 0; i < 3; i++)
                {
                    list1.Add(info1);
                }

                foreach (var item in list1)
                {
                    item.department = Guid.NewGuid().ToString();
                }
这种情况下赋值item.department 值的guid都一样,你查一下赋值代码是否有类似代码
你这个问题是因为list1里边放了3个info1对象,这3个info1,其实是一个对象,info1= new Info() 放到for循环里边就行了
Nick黄 2019-09-12
  • 打赏
  • 举报
回复
引用 38 楼 outby 的回复:
我记得老师讲过这个东东就是毫秒级的,上面他用的是无节制的循环,有可能1毫秒会产出会多个,所以会有重复,所以,如果他不改变方式,还是这样的方式,暂停1毫秒是有必要的。
纳秒,不是毫秒
  • 打赏
  • 举报
回复
重复是个不可能事件, 概率非常非常小
outby 2019-09-05
  • 打赏
  • 举报
回复
我记得老师讲过这个东东就是毫秒级的,上面他用的是无节制的循环,有可能1毫秒会产出会多个,所以会有重复,所以,如果他不改变方式,还是这样的方式,暂停1毫秒是有必要的。
shushukui 2019-09-05
  • 打赏
  • 举报
回复
理论上不会重复。
加载更多回复(37)

111,083

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部