Kai, 스레드를 사용하여 원하는 작업을 수행하는 프로그램을 제공했습니다. 다음 조건에 따라 라이센스가 부여됩니다. 실행하는 CPU 코어 당 시간당 $ 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?");
}
}
}
추신 : 병렬 확장 라이브러리를 사용 해보고 싶었습니다. 그것은 쉽다.
제어 흐름으로 OutOfMemoryException을 사용하면 느낌이 잘못됩니다.
편집하다
글쎄, 이것은 여전히 투표를 유치하는 것 같습니다. 그래서 GC.KeepAlive () 문제를 해결했습니다. 그리고 C # 4로 실행되도록 변경했습니다.
또한 지원 조건을 명확히하기 위해 2010 년 2 월 28 일만 지원됩니다. 그날에만 지원 요청을하려면 타임머신을 사용하십시오.
편집 2
항상 그렇듯이 GC는 메모리 관리보다 더 나은 작업을 수행합니다. 직접 시도했던 모든 시도는 실패로 끝났습니다.