社区
C#
帖子详情
难道Guid也会重复???
shuguangleo
2010-11-16 03:02:17
写了10个线程,每个线程里有一个whil循环循环200次,向数据库里查数据,每条数据有自己的主键都是Guid.NewGuid().ToString();
10个线程一起运行,运行一定时间总会提示约束冲突,调试时发现,产生了重复的Guid,因此插入的时候报错。
难道Guid这么容易重复????这个问题怎么解决?
...全文
1398
24
打赏
收藏
难道Guid也会重复???
写了10个线程,每个线程里有一个whil循环循环200次,向数据库里查数据,每条数据有自己的主键都是Guid.NewGuid().ToString(); 10个线程一起运行,运行一定时间总会提示约束冲突,调试时发现,产生了重复的Guid,因此插入的时候报错。 难道Guid这么容易重复????这个问题怎么解决?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qzx123
2011-01-15
打赏
举报
回复
GUID是以机器和时间为限制生成的 LZ使用多线程的时候应该知道多线程的意思就是多个线程并发执行 既然是并发那就有可能出现多个线程同时进行的情况 这样就不难理解为什么LZ生成的GUID会重复了 这个问题在单核单CPU情况下应该是不会出现的
csz_1987
2010-11-17
打赏
举报
回复
http://www.cnblogs.com/BearsTaR/archive/2010/10/19/unique_random_code.html#1937718
产生唯一随机码的方法分析。
phil999
2010-11-16
打赏
举报
回复
因为是多线程,很可能是同步没做好读到了重复的guid,而不是生成的guid重复。加个调试语句:
string str = Guid.NewGuid().ToString();
Debug.WriteLine(str);
看看输出窗口写出guid重复不重复
特别
2010-11-16
打赏
举报
回复
GUID出现重复并不是什么大惊小怪的事情,只不过概率稍低而已
烈火蜓蜻
2010-11-16
打赏
举报
回复
说那么多没用,把代码弄出来看一下吧
colorall
2010-11-16
打赏
举报
回复
绝对不会重复的,代码写的肯定有问题,不信把代码贴出来。
hyblusea
2010-11-16
打赏
举报
回复
在单核CPU上的计算机开多线程,几乎是不会出现重复的
夜归人
2010-11-16
打赏
举报
回复
GUID重复,用VS自带的GUID工具重新生成一个GUID就可以了啊
air123456789
2010-11-16
打赏
举报
回复
不是程序外 是线程外。
air123456789
2010-11-16
打赏
举报
回复
guid字符串定义写在了 程序外 然后 在线程里赋值了? 我之前发生过类似的错误。
shuguangleo
2010-11-16
打赏
举报
回复
大家似乎没明白我的意思。
情况就是:
10个线程无优先级的往10个不同的表里插数据,每个线程都随进生成guid。结果是开的线程越多,某个线程就越会出现往自己表里插重复guid的现象。
shuguangleo
2010-11-16
打赏
举报
回复
[Quote=引用 11 楼 yuxianye1 的回复:]
楼主应该知道guid生产的原理是什么吧
机器、 网卡等的硬件编码 还有当前的时间
线程多了可能同时执行,产生的guid可能相同
十个线程对应十个不同的表也有重复。这个问题没搞清楚,具体guid生产根据时间的值的精度不知道
[/Quote]
不同表里有重复不要紧啊。同一表里为什么会有重复。
就选线程A和线程B在莫一时刻生成了两条一模一样的guid,可这两个一样的guid在两个不同的表里。
我现在情况是:在同一表里很容易生成同样的guid,导致无法插入数据。
shuguangleo
2010-11-16
打赏
举报
回复
[Quote=引用 9 楼 linux7985 的回复:]
引用 6 楼 shuguangleo 的回复:
但是,我这10个线程对应10个不同的数据库表,不同表中重复了没关系,为什么同一表中也会这么容易出现重复值???
只能说,无语、
GUID是不同的机器以及不同的时间才不会出现重复,
而你的环境是什么?
相同的机器,而且你还开发10个线程,
在DateTime最小的时间单位内,都很有可能同时执行NewGuid()的方法,能不重……
[/Quote]
是,可能某一时刻两个想成同时执行NewGuid()的方法,但两个线程对应的是两个不同的表。同表中怎么可能有重复?
yuxianye1
2010-11-16
打赏
举报
回复
楼主应该知道guid生产的原理是什么吧
机器、 网卡等的硬件编码 还有当前的时间
线程多了可能同时执行,产生的guid可能相同
十个线程对应十个不同的表也有重复。这个问题没搞清楚,具体guid生产根据时间的值的精度不知道
大明湖畔_帅锅
2010-11-16
打赏
举报
回复
这个
烈火蜓蜻
2010-11-16
打赏
举报
回复
[Quote=引用 6 楼 shuguangleo 的回复:]
但是,我这10个线程对应10个不同的数据库表,不同表中重复了没关系,为什么同一表中也会这么容易出现重复值???
[/Quote]
只能说,无语、
GUID是不同的机器以及不同的时间才不会出现重复,
而你的环境是什么?
相同的机器,而且你还开发10个线程,
在DateTime最小的时间单位内,都很有可能同时执行NewGuid()的方法,能不重复吗?
guojh021
2010-11-16
打赏
举报
回复
你的程序有问题。
shuguangleo
2010-11-16
打赏
举报
回复
但是,我这10个线程对应10个不同的数据库表,不同表中重复了没关系,为什么同一表中也会这么容易出现重复值???
shuguangleo
2010-11-16
打赏
举报
回复
但是,我这10个线程对应10个不同的数据库表,不同表中重复了没关系,为什么同一表中也会这么容易出现重复值???
shuguangleo
2010-11-16
打赏
举报
回复
[Quote=引用 3 楼 fellowcheng 的回复:]
guid的算法和当前时间有关系,可能是guid重复的原因
[/Quote]
我估计也是,我发现开的线程越少,重复的几率越低,开的越多,重复几率越大。
加载更多回复(4)
生成
GUID
程序,C#源代码,System.
Guid
.New
Guid
().ToString()全球唯一标识符 (
GUID
) 是一个字母数字标识符,用于指示产品的唯一性安装。在许多流行软件应用程序(例如 Web 浏览器和媒体播放器)中,都使用
GUID
。
生成
GUID
程序,C#源代码,System.
Guid
.New
Guid
().ToString()全球唯一标识符 (
GUID
) 是一个字母数字标识符,用于指示产品的唯一性安装。在许多流行软件应用程序(例如 Web 浏览器和媒体播放器)中,都使用
GUID
。
GUID
的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即为有效的
GUID
值。 为什么要使用
GUID
? 世界上的任何两台计算机都不
会
生成
重复
的
GUID
值。
GUID
主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。在 Windows 平台上,
GUID
应用非常广泛:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。 VisualStudio2008创建
java
guid
重复
_
GUID
为什么
会
重复
了,是代码有问题吗?
根据我在网上查到资料,表示
GUID
重复
几率很小,但是我这边项目最近一启动,没过多长时间就
会
有
重复
的
GUID
生成,是我代码上面写的有问题吗?具体代码如下:public class AccountTaskExecutorTask extends TimerTask {private static final Logger logger = Logger.getLogger(AccountTaskExe...
【C#学习笔记】【
GUID
】
关于
GUID
的介绍。
GUID
(全局同意标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台
会
提供生成
GUID
的API。生成算法很有意思,用到了以太网卡地址、纳米级时间、芯片ID码和许多可能的数字。
GUID
的唯一缺陷在于生成的结果串
会
比较大。一个
GUID
为一个128位的整数(16字节),总数量达2^128 (3.4X10^38)个,在使用唯一标识符的情况下,你可以在所有计算机和网咯之间使用这一整数。
Oracle生成不
重复
字符串 sys_
guid
()
在oracle8i以后提供了一个生成不
重复
的数据的一个函数sys_
guid
()一共32位,生成的依据主要是时间和机器码,具有世界唯一性,类似于java中的UUID(都是世界唯一的)。 其优点就是生成的字符串是唯一的,但其和UUID有同样的弊端:生成的序列过长并且没有规律不方便记忆。 其应用场景:当数据库某字段设置为唯一,则可用次生成(比如主键); 获取方式 select sys_
guid
()
用
GUID
生成随机数(
重复
性基本为0)
随机数不管是前端还是后端都
会
用到的一个地方,不管是从验证码还是各种生成的状态码,基本都是随机生成的,还有就是一些抽奖的算法,也是用随机数来处理的,生成随机数的方法目前是很多的,但是其实很多是
重复
性很大的,今天简单的讲一下怎么生成随机数
重复
性很低的一种办法
GUID
(Globally Unique Identifier)一种由算法生成的二进制长度为128位的数字标识符不
重复
的原理:
GUID
的总数达到...
C#
111,097
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章