Kai, tôi đã cung cấp một chương trình sẽ làm những gì bạn muốn bằng cách sử dụng các chủ đề. Nó được cấp phép theo các điều khoản sau: bạn phải trả cho tôi 0,0001 đô la mỗi giờ cho mỗi lõi CPU mà bạn chạy nó. Lệ phí được trả vào cuối mỗi tháng dương lịch. Vui lòng liên hệ với tôi để biết chi tiết tài khoản paypal của tôi một cách thuận tiện sớm nhất.
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: Tôi muốn dùng thử thư viện mở rộng Parallel. Điều đó thật dễ dàng.
Và sử dụng OutOfMemoryException làm luồng điều khiển chỉ cảm thấy sai.
BIÊN TẬP
Chà, có vẻ như điều này vẫn thu hút phiếu bầu. Vì vậy, tôi đã sửa vấn đề GC.KeepAlive (). Và thay đổi nó để chạy với C # 4.
Và để làm rõ các điều khoản hỗ trợ của tôi: hỗ trợ chỉ khả dụng vào ngày 28/2/2010. Vui lòng sử dụng một cỗ máy thời gian để thực hiện các yêu cầu hỗ trợ vào ngày đó.
EDIT 2
Như mọi khi, GC làm việc tốt hơn tôi trong việc quản lý bộ nhớ; bất kỳ nỗ lực nào trước đây để làm điều đó bản thân tôi đã cam chịu thất bại.