While Guid.NewGuid does generate a completely unique id, it's 36 characters long. This makes hashing and equality comparisons take longer.
The reality is we only need uniqueness within the process space and make a good faith effort to avoid collisions with user saved extra data.
With that in mind I'm going to introduce the following class that will generate unique id's that are 4characters + N (number always incrementing)
public static class UniqueStringId
{
private static ThreadLocal<Random> _local = new ThreadLocal<Random>(() => new Random());
private static int _counter;
public static string Generate()
{
var intValue = _local.Value.Next();
StringBuilder builder = new StringBuilder();
builder.Append((char)(intValue % 95 + 32));
intValue = intValue >> 7;
builder.Append((char)(intValue % 95 + 32));
intValue = intValue >> 7;
builder.Append((char)(intValue % 95 + 32));
intValue = intValue >> 7;
builder.Append((char)(intValue % 95 + 32));
builder.Append(Interlocked.Increment(ref _counter));
return builder.ToString();
}
}
While Guid.NewGuid does generate a completely unique id, it's 36 characters long. This makes hashing and equality comparisons take longer.
The reality is we only need uniqueness within the process space and make a good faith effort to avoid collisions with user saved extra data.
With that in mind I'm going to introduce the following class that will generate unique id's that are 4characters + N (number always incrementing)