Guid.NewGuid() 返回重复项?

2024-03-17

我们有一个应用程序可以为我们的一项服务生成模拟数据以用于测试目的。每个数据项都有一个唯一的 Guid。然而,当我们对模拟器进行一些小的代码更改后运行测试时,它生成的所有对象都具有相同的 Guid。

创建了一个数据对象,然后是一个 for 循环,其中修改了该对象的属性,包括一个新的唯一 Guid,并通过远程处理(可序列化,而不是按引用封送,如果您是这样的话)将其发送到服务正在思考),循环并再次执行,等等。

如果我们在循环中放置一个小的 Thread.Sleep(...),它会生成唯一的 id。我认为这是一个转移注意力的事情。我创建了一个测试应用程序,它只是创建了一个又一个的 guid,并且没有得到任何重复。

我的理论是,IL 的优化方式导致了这种行为。关于我的理论就够了。你怎么认为?我愿意接受建议和测试方法。

更新:我的问题似乎有很多困惑,所以让我澄清一下。我不认为 N​​ewGuid() 被破坏了。显然它有效。没关系!但某个地方有一个错误,会导致 NewGuid() 执行以下任一操作: 1)在我的循环中仅被调用一次 2)在我的循环中每次都被调用但只分配一次 3)还有一些我没想到的事情

这个错误可能在我的代码中(最有可能)或在某个地方的优化中。

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

(感谢您的精彩讨论,这确实帮助我澄清了我心中的问题)

更新#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
}

Submit 是否执行异步调用,或者票证对象是否在任何阶段进入另一个线程。

在代码示例中,您重用了同一个对象。如果“提交”在短暂延迟后在后台线程中发送票证(并且不获取副本),会怎么样?当您更改 CacheId 时,您实际上是在更新所有待处理的提交。这也解释了为什么 Thread.Sleep 可以解决该问题。尝试这个:

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

如果由于某种原因这是不可能的,请尝试此操作并查看它们是否仍然相同:

ticket.CacheId = new Guid("00000000-0000-0000-0000-" + 
     string.Format("{0:000000000000}", i));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Guid.NewGuid() 返回重复项? 的相关文章

随机推荐

  • 如何将数组的元素作为单独的参数传递给函数?

    我有一个像这样的函数 但有更多参数 function do something n1 n2 n3 return n1 n2 n3 然后我有一个包含 3 个项目的数组 它们是该函数的参数 my array 10 123 14 例如 do so
  • SQL Server JDBC 异常

    当使用 ANT 构建我的 Java 应用程序时 我不断收到此错误 我已多次尝试使用 SQLJDBC JAR 和 SQLJDBC4 JAR 但不断收到此错误消息 我完全困惑为什么即使升级到 sqljdbc4 jar 后也会收到此错误 java
  • Nginx 未运行且没有错误消息

    我正在尝试启动我的 nginx 服务器 当我输入 gt etc init d nginx start 时 出现一条消息 正在启动 nginx 然后什么也没有发生 没有错误消息 当我检查 nginx 的状态时 我发现它没有运行 这是我的 et
  • 程序在 execvp( command.argv[0], command.argv) 之后停止

    我正在编写一个小型 shell 程序 它接受命令并执行它 如果用户输入无效命令 if 语句将返回 1 如果命令正确 则执行该命令 但是一旦执行该命令 程序就会结束 我做错了什么 不执行后面的代码行 我已经使用 ls 和 cat 命令测试了
  • 使用公式内现有单元格的值

    我正在使用 Excel 2010 中的 相机 功能 我的目标是有一个单元格 其中有一个我可以手动输入的日期 并且在其下方 公式将获得更新的值 该值代表另一个 Excel 文件中的工作表名称 并向我显示更新的屏幕截图 例如 细胞A1 has
  • 如何隐藏 VS Code 中的状态栏?

    如何隐藏 Visual Studio Code 中的状态栏 应该可以隐藏状态栏 有什么办法可以隐藏它吗 在 查看 菜单中 我找不到隐藏它的选项 View gt Appearance gt Show Status Bar Screenshot
  • subprocess.wait() 不等待 Popen 进程完成(使用线程时)?

    我在使用时遇到一些问题subprocess Popen 使用线程从我的 python 脚本生成同一应用程序的多个实例 使它们同时运行 在每个线程中 我使用以下命令运行应用程序popen 调用 然后我通过调用等待它完成wait 问题似乎在于w
  • 解析两个 XML 标签之间的值

    我知道以前有人问过这个问题 但我似乎找不到合适的解决方案 所以我会说明问题 我有一个类似于 XML 文件的字符串 它不是 XML 字符串 但有开始和结束标记 所有信息都位于一行中 例如
  • 电子邮件客户端无法验证带有 bouncycastle 签名的附件和图像的电子邮件

    我有一个邮件编辑器构建哑剧消息并使用邮件签名服务 签名是在sign and 构建签名生成器 方法 收到邮件后 邮件客户端检测到签名 但抱怨邮件可能已被篡改 邮件客户端能够显示证书 它显示所有证书 包括 CA 因此 要么基于 Bouncyca
  • 让 Rscript 从 stdin 读取或获取输入

    我了解了如何让 Rscript 在给定文件名作为参数时执行我想要的操作 例如如果我的 Rscript 被调用script并包含 usr bin Rscript path lt commandArgs 1 writeLines readLin
  • Doctrine Querybuilder ORDER BY 子句不在 SELECT 列表中

    我有以下查询生成器 queryBuilder this gt createQueryBuilder recipient gt leftJoin recipient message message gt orderBy message dat
  • $.post 仅适用于警报 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 当我调用带有警报的功能时 该功能运行良好 function post var cvs client nbr val var cs cs va
  • Ruby on Rails:在单个数据库单元中保存多个值

    如何在 Ruby on Rails 应用程序中的单个单元格记录中保存多个值 如果我有一个名为Exp列名为 Education Experience and Skill 如果我希望用户在单行中存储多个值 例如 教育机构或技能 最佳实践是什么
  • 崩溃报告显示在 App Store Connect 中,但不显示在 Xcode Organizer 中

    我们已将应用程序上传到 TestFlight 进行 Beta 测试 当应用程序在测试人员的设备上崩溃时 崩溃会按预期显示在 App Store Connect 中 但不会显示在 Xcode Organizer 中 管理器中的崩溃选项卡显示了
  • PagedListAdapter.submitList() 更新现有项目时行为异常

    本主题的小故事 应用程序只是在确认后通过对话框更新单击的行的值 在房间数据库上使用分页方案 当添加或删除项目时 会获取最新的数据集并将其传递给submitList方法 然后所有更改都会被看到并且运行良好 问题从这里开始 如果更新了现有项目
  • 设置 AssemblyInfo.cs 的默认值

    更改创建 AssemblyInfo cs 的默认值的最佳方法是什么 例如我不想要 AssemblyCompany 和 AssemblyCopyright 中的 Microsoft 位 assembly AssemblyCompany Mic
  • 使用Python unicode的特殊字符问题

    usr bin env python coding utf 8 def splitParagraphIntoSentences paragraph break a paragraph into sentences and return a
  • Python ctypes 参数与 DLL - 指向双精度数组的指针

    我是一名使用 Python 中的 ctypes 的新手编码人员 并尝试使用用 C 编写的 DLL 中的函数 我在 SO 上发现了很多与我类似的问题 但没有任何答案可以回答此类难题 我已经很好地加载了 DLL 但是我需要调用的函数之一需要一个
  • marionette.js 布局/区域结构和渲染方法示例

    我正在尝试使用 marionette js 作为我的主干应用程序 但我对如何组织布局 区域并渲染它们感到有点困惑 我正在寻找一个具有嵌套布局和区域的示例应用程序 以便我可以更好地理解 有什么建议吗 看看这个小提琴 http jsfiddle
  • Guid.NewGuid() 返回重复项?

    我们有一个应用程序可以为我们的一项服务生成模拟数据以用于测试目的 每个数据项都有一个唯一的 Guid 然而 当我们对模拟器进行一些小的代码更改后运行测试时 它生成的所有对象都具有相同的 Guid 创建了一个数据对象 然后是一个 for 循环