Skip to content

Detailed Usage

Taiizor edited this page Dec 28, 2024 · 4 revisions

📖 Detailed Usage

UUID Structure

A UUID consists of two main components:

  • 64-bit timestamp
  • 64-bit random data

This structure enables:

  • Time-based sorting
  • Minimal collision probability
  • Cryptographic security

Timestamp

UUID id = new UUID();
DateTimeOffset timestamp = id.Time;

// Timestamp is always UTC-based
Console.WriteLine($"UTC Timestamp: {timestamp:u}");

Encoding Options

Base32 Encoding

  • 26 characters in length
  • URL-safe characters
  • Removed confusing characters (I, L, O, etc.)
string base32 = id.ToBase32();

Base64 Encoding

  • Standard Base64 encoding
  • More compact representation
string base64 = id.ToBase64();

Performance Optimizations

Buffer Reuse

byte[] buffer = new byte[UUID.SIZE];
if (id.TryWriteBytes(buffer))
{
    // Use buffer
}

String Buffer

char[] buffer = new char[32];
if (id.TryWriteStringify(buffer))
{
    // Use string buffer
}

Guid Integration

UUIDs are fully compatible with Guid:

// UUID -> Guid
UUID id = new UUID();
Guid guid = id.ToGuid();
// or
guid = id;

// Guid -> UUID
Guid originalGuid = Guid.NewGuid();
UUID fromGuid = UUID.FromGuid(originalGuid);
// or
fromGuid = originalGuid;

Comparison and Sorting

UUIDs support various comparison operators:

UUID id1 = new UUID();
UUID id2 = new UUID();

// Equality
bool equals = id1 == id2;
bool notEquals = id1 != id2;

// Ordering
bool lessThan = id1 < id2;
bool greaterThan = id1 > id2;
bool lessOrEqual = id1 <= id2;
bool greaterOrEqual = id1 >= id2;

// IComparable
int comparison = id1.CompareTo(id2);

Thread Safety

The UUID library is designed to be thread-safe:

  • Each thread has its own RandomNumberGenerator instance
  • Immutable struct design
  • Lock-free operations
// Example multi-threaded usage
var tasks = Enumerable.Range(0, 1000)
    .Select(_ => Task.Run(() => new UUID()))
    .ToArray();

await Task.WhenAll(tasks);