Kai, saya telah menyediakan program yang akan melakukan apa yang Anda inginkan menggunakan utas. Ini dilisensikan dengan ketentuan berikut: Anda harus membayar saya $ 0,0001 per jam per inti CPU Anda menjalankannya. Biaya dibayarkan pada akhir setiap bulan kalender. Silakan hubungi saya untuk detail akun paypal saya pada kenyamanan Anda.
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: Saya ingin mencoba pustaka ekstensi Paralel. Itu mudah.
Dan menggunakan OutOfMemoryException sebagai aliran kontrol terasa salah.
EDIT
Yah, sepertinya ini masih menarik suara. Jadi saya telah memperbaiki masalah GC.KeepAlive (). Dan mengubahnya untuk dijalankan dengan C # 4.
Dan untuk memperjelas persyaratan dukungan saya: dukungan hanya tersedia pada 28 / Feb / 2010. Harap gunakan mesin waktu untuk membuat permintaan dukungan hanya pada hari itu.
EDIT 2
Seperti biasa, GC melakukan pekerjaan yang lebih baik daripada yang saya lakukan dalam mengelola memori; setiap upaya sebelumnya untuk melakukannya sendiri akan gagal.