ฉันได้จัดทำโปรแกรมที่จะทำสิ่งที่คุณต้องการโดยใช้เธรด มันได้รับอนุญาตภายใต้เงื่อนไขดังต่อไปนี้: คุณต้องจ่ายให้ฉัน $ 0.0001 ต่อชั่วโมงต่อ CPU หลักที่คุณใช้งาน ชำระค่าธรรมเนียมเมื่อสิ้นสุดแต่ละเดือนตามปฏิทิน โปรดติดต่อฉันสำหรับรายละเอียดบัญชี 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: ฉันต้องการลองใช้ไลบรารีส่วนขยายแบบขนาน นั่นเป็นเรื่องง่าย
และใช้ OutOfMemoryException เป็นโฟลว์ควบคุมเพียงแค่รู้สึกผิด
แก้ไข
ดูเหมือนว่านี่จะยังคงดึงดูดคะแนนเสียง ดังนั้นฉันจึงแก้ไขปัญหา GC.KeepAlive () และเปลี่ยนมันให้ทำงานด้วย C # 4
และเพื่อชี้แจงข้อกำหนดการสนับสนุนของฉัน: การสนับสนุนมีให้เฉพาะใน 28 / Feb / 2010 โปรดใช้ไทม์แมชชีนเพื่อขอการสนับสนุนในวันนั้นเท่านั้น
แก้ไข 2
เช่นเคย GC ทำงานได้ดีกว่าการจัดการหน่วยความจำ ความพยายามครั้งก่อน ๆ ที่ทำด้วยตัวเองถูกทำให้ล้มเหลว