काई, मैंने एक कार्यक्रम प्रदान किया है जो आप थ्रेड्स का उपयोग करना चाहते हैं। यह निम्नलिखित शर्तों के तहत लाइसेंस प्राप्त है: आपको सीपीयू कोर प्रति 0.0001 डॉलर प्रति घंटे का भुगतान करना होगा जो आप इसे चलाते हैं। प्रत्येक कैलेंडर माह के अंत में शुल्क देय हैं। कृपया मुझे अपने पेपाल खाते के विवरण के लिए अपनी जल्द से जल्द सुविधा के लिए संपर्क करें।
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?");
}
}
}
पुनश्च: मैं समानांतर एक्सटेंशन लाइब्रेरी को आज़माना चाहता था। वह तो आसान था।
और नियंत्रण प्रवाह के रूप में OutOfememoryException का उपयोग करना सिर्फ गलत लगता है।
संपादित करें
खैर, ऐसा लगता है कि यह अभी भी वोटों को आकर्षित करता है। तो मैंने GC.KeepAlive () मुद्दा तय कर लिया है। और इसे C # 4 के साथ चलाने के लिए बदल दिया।
और मेरी समर्थन शर्तों को स्पष्ट करने के लिए: समर्थन केवल 28 / फरवरी / 2010 को उपलब्ध है। कृपया उस दिन केवल समर्थन अनुरोध करने के लिए टाइम मशीन का उपयोग करें।
EDIT 2
हमेशा की तरह, जीसी एक बेहतर काम करता है जितना मैं मेमोरी को मैनेज करने में करता हूं; किसी भी पिछले प्रयास में यह खुद को विफल करने के लिए बर्बाद कर रहे थे।