按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。
8年前关闭。
已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。
我想证明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());
我正在使用C#。
Kai,我提供了一个程序,该程序可以使用线程来完成您想做的事情。它根据以下条款获得许可:您必须为运行它的每个CPU内核每小时向我支付$ 0.0001。费用在每个日历月末支付。请尽快与我联系以获取我的Paypal帐户详细信息。
using System; using System.Collections.Generic; using System.Linq; namespace GuidCollisionDetector { class Program { static void Main(string[] args) { //var reserveSomeRam = new byte[1024 * 1024 * 100]; // This indeed has no effect. Console.WriteLine("{0:u} - Building a bigHeapOGuids.", DateTime.Now); // Fill up memory with guids. var bigHeapOGuids = new HashSet<Guid>(); try { do { bigHeapOGuids.Add(Guid.NewGuid()); } while (true); } catch (OutOfMemoryException) { // Release the ram we allocated up front. // Actually, these are pointless too. //GC.KeepAlive(reserveSomeRam); //GC.Collect(); } Console.WriteLine("{0:u} - Built bigHeapOGuids, contains {1} of them.", DateTime.Now, bigHeapOGuids.LongCount()); // Spool up some threads to keep checking if there's a match. // Keep running until the heat death of the universe. for (long k = 0; k < Int64.MaxValue; k++) { for (long j = 0; j < Int64.MaxValue; j++) { Console.WriteLine("{0:u} - Looking for collisions with {1} thread(s)....", DateTime.Now, Environment.ProcessorCount); System.Threading.Tasks.Parallel.For(0, Int32.MaxValue, (i) => { if (bigHeapOGuids.Contains(Guid.NewGuid())) throw new ApplicationException("Guids collided! Oh my gosh!"); } ); Console.WriteLine("{0:u} - That was another {1} attempts without a collision.", DateTime.Now, ((long)Int32.MaxValue) * Environment.ProcessorCount); } } Console.WriteLine("Umm... why hasn't the universe ended yet?"); } } }
PS:我想尝试一下Parallel扩展库。那很简单。
并且使用OutOfMemoryException作为控制流只是感觉不对。
编辑
好吧,看来这仍然吸引了选票。所以我已经解决了GC.KeepAlive()问题。并将其更改为与C#4一起运行。
为了阐明我的支持条款:仅在2010年2月28日提供支持。请仅使用时间机器在当天发出支持请求。
编辑2 与往常一样,GC在管理内存方面比我做得更好。我自己以前做过的任何尝试都注定要失败。