我们有一个应用程序为我们的某个服务生成模拟数据以进行测试.每个数据项都有一个唯一的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) 现在,我正在开发的一个项目达到了复杂程度,需要多个步骤(实际上它变得神秘!)才能生成完整/可用的产品.不幸的是,我们并没有开始使用Continuos Integration的思维模式,所以你可以想象它有时会很痛苦,而在其他人看来,我可以轻松地浪费半天时间来尝试获得干净/经过测试的构建.
无论如何,任何巨大的项目都包含许多不同语言的许多组件(例如企业风格的Java或C#),以及许多图形和文本资源.现在的问题是,当我寻找Continuos Integration时,我总能找到最佳实践和技术,假设一个人从头开始创建一个新项目.然而,这不是一个新项目,所以我想知道什么是积极开始从奥术整合迁移到Continuos集成的一些好资源:)
提前致谢!
构建iPhone项目会导致:
无法启动模拟应用程序:SpringBoard无法启动应用程序,错误:7
该应用程序不会安装在模拟器上.这是怎么回事?什么是SpringBoard,什么是错误7?
我一直致力于传统的C++应用程序,我绝对不在我的舒适区域(一件好事).我想知道是否有人会非常友好地给我一些指示(双关语).
我需要将unsigned char数组中的2个字节转换为unsigned short.字节是连续的.
有关我想要做的事情的一个例子:
我从套接字接收一个字符串并将其放在unsigned char数组中.我可以忽略第一个字节,然后接下来的2个字节应转换为unsigned char.这将只在Windows上,因此没有Big/Little Endian问题(我知道).
这就是我现在拥有的(显然不是很明显):
//packetBuffer is an unsigned char array containing the string "123456789" for testing
//I need to convert bytes 2 and 3 into the short, 2 being the most significant byte
//so I would expect to get 515 (2*256 + 3) instead all the code I have tried gives me
//either errors or 2 (only converting one byte
unsigned short myShort;
myShort = static_cast<unsigned_short>(packetBuffer[1])
Run Code Online (Sandbox Code Playgroud) 我们有一些整数算术,由于历史原因,它必须在PHP上使用与在一些静态类型语言中相同的算法.自从我们上次升级PHP以来,溢出整数的行为已经改变.基本上我们使用以下公式:
function f($x1, $x2, $x3, $x4)
{
return (($x1 + $x2) ^ $x3) + $x4;
}
Run Code Online (Sandbox Code Playgroud)
但是,即使有转换:
function f($x1, $x2, $x3, $x4)
{
return intval(intval(intval($x1 + $x2) ^ $x3) + $x4);
}
Run Code Online (Sandbox Code Playgroud)
我仍然以完全错误的数字结束......
例如,使用$ x1 = -1580033017,$ x2 = -2072974554,$ x3 = -1170476976)和$ x4 = -1007518822,我最终得到PHP中的-30512150和C#中的1617621783.
只是加在一起$ x1和$ x2我无法得到正确的答案:
在C#我得到
(-1580033017 + -2072974554) = 641959725
Run Code Online (Sandbox Code Playgroud)
在PHP中:
intval(intval(-1580033017) + intval(-2072974554)) = -2147483648
Run Code Online (Sandbox Code Playgroud)
这与:
intval(-1580033017 + -2072974554) = -2147483648
Run Code Online (Sandbox Code Playgroud)
我不介意写一个"IntegerOverflowAdd"函数或其他东西,但我不太清楚如何(-1580033017 + -2072974554)等于641959725.(我确实认为它是-2147483648 +(2*2 ^ 31) ,但是-2147483648 + 2 ^ 31是-1505523923,它大于Int.Min那你为什么要加2*2 ^ 31而不是2 …
如何在ASP.NET中全局设置日期格式?
我的本地计算机和服务器的"区域设置"设置为"英语(新西兰)".
当我格式化日期时,dd/MM/yyyy我希望以19/11/2008今天为例看到.
直到最近,这实际上是我从本地机器和服务器获得的.
就在最近,由于一些神秘的原因,我们的本地机器变得如此轻微.尽管仍然设置为"英语(新西兰)",日期分隔符已从更改/为-!仍然显示"英语(新西兰)"和/日期分隔符的服务器上没有发生相同的更改.
所以现在我的本地机器,dd/MM/yyyy我得到的格式19-11-2008而不是19/11/2008.
这有点令人不安.
到目前为止,我能看到的唯一方法是逃避斜线并将格式设置为dd\/MM\/yyyy.它似乎有效,但它似乎不是理想的解决方案.
有人可以帮忙吗?
注意:这适用于Intranet应用程序,我不关心真正的全球化.我只是想修改日期格式而不是让它改变我.
我正在ASP.NET MVC中创建一个小应用程序,它根据某些标准生成ics(iCal)文件.生成的文件可通过永久URL(http://myserver/some/criterias.ics)访问.
我正在寻找一种在页面上显示日历数据的方法,以便为用户提供生成文件的预览.理想情况下,我想在页面中嵌入Google日历类型界面.遗憾的是,Google日历似乎只允许嵌入先前已添加到其系统中的日历.
是否有任何免费服务或图书馆允许我在我的网站上嵌入任意ics文件的日历?
好吧,我猜这完全是主观的,但我正在考虑随机数生成器的熵源.大多数发电机都按当前时间播种,对吗?好吧,我很好奇其他资源可以用来生成完全有效的,随机的(宽松的定义)数字.
使用多个来源(例如时间+当前硬盘寻找时间[我们在这里是非常奇妙的])一起创建一个比单个来源更"随机"的数字?来源数量的逻辑限制是什么?真的够多少钱?选择时间只是因为方便吗?
如果不允许这种事情,请原谅我,但我对这些消息来源背后的理论感到好奇.
我已经研究并考虑了许多JavaScript单元测试和测试工具,但一直无法找到合适的选项来保持完全符合TDD标准.那么,是否有一个完全符合TDD标准的JavaScript单元测试工具?
给定一个点(pX,pY)和一个具有已知中心(cX,cY)和半径(r)的圆,你可以找到最短的代码量来找到最接近(pX的圆上的点) pY)?
我有一些代码工作,但它涉及将圆转换为形式的方程(x - cX)^ 2 +(y - cY)^ 2 = r ^ 2(其中r是半径)并使用方程从点(pX,pY)到(cX,cY)的线,以创建要求解的二次方程.
一旦我解决了它会做的错误,但它似乎是一个不优雅的解决方案.