C# GUID ve Sıralı GUID Oluşturma, yazım ile C# eğitim setime devam ediyorum. Bu dersimizde C# üzerinden guid ve sıralı guid oluşturma işlemlerine bakacağız.
C# GUID ve Sıralı GUID Oluşturma
C# ta Guid oluşturma çok basit bir işlemdir. Bu işlem için hazır sınıf bulunmaktadır. Hemen görelim.
string GUID = Guid.NewGuid().ToString();
Guid sınıfını kullanarak en basit bir şekilde Guid oluşturmak yukarıdaki gibidir. Yukarıdaki kodu çalıştırdığımızda 32 Digit lik benzersiz bir ID oluşur. Aşağıdaki gibi,
1f518117-825f-4bf8-ada1-264c45afde1b 696c4182-eec1-48ed-91e9-8ad0dd8e0678 e2a8d37d-d89b-46b6-9ac5-3f9bdc851f5d fe9f144e-c24b-41a9-8176-b88e0b4a3453
ToString() metodu ile GUID sınıfı kullanarak farklı formatlarda da Guid alabiliriz. Örnek vermek gerekirse,
string GUID = Guid.NewGuid().ToString("N");
ToString() metoduna N parametresi göndererek
71342409914c4ffc8cc525f4ac777f77
şeklinde Guid alabiliyoruz. Dikkat ederseniz aralarda tre ( – ) vs. ayraçlar yok.
string GUID = Guid.NewGuid().ToString("D");
ToString() metoduna D parametresi göndererek
fb5ccf84-cad2-4fab-84f1-35ab50c025b4
şeklinde Guid alabiliyoruz. Bu normal bildiğimiz Guid.
string GUID = Guid.NewGuid().ToString("B");
ToString() metoduna B parametresi göndererek
{83af4563-61dc-4815-9a60-5395e8085778}
şeklinde Guid alabiliyoruz. Dikkat ederseniz başında ve sonunda süslü parantezler var ( { } )
string GUID = Guid.NewGuid().ToString("P");
ToString() metoduna P parametresi göndererek
(1ae015c8-a534-4e1d-9ea4-9db553a39f4f)
şeklinde Guid alabiliyoruz. Dikkat ederseniz başında ve sonunda parantezler var ( ( ) )
C# Rastgele Guid Üretmek
Buraya kadar Guid sınıfını kullanarak alabildiğimiz Guid kodlarını gördük. Şimdi gelelim bu rastgele üretilen Guid’leri sıralı olarak nasıl alabiliriz…
Guid’leri sıralı olarak almak için şuanda elimde iki farklı yöntem var. İki yöntemi de sizlerle paylaşacağım.
İlk bulduğum yöntemi sizlerle paylaşayım. Şimdi vereceğim bu yöntem biraz sıkıntılı gibi görünüyor. Yani kodları paylaşan kişi bazı durumlarda sorun çıkabileceğini belirtmiş.
Guid GenerateGuid() { byte[] destinationArray = Guid.NewGuid().ToByteArray(); DateTime time = new DateTime(0x76c, 1, 1); DateTime now = DateTime.Now; TimeSpan span = new TimeSpan(now.Ticks - time.Ticks); TimeSpan timeOfDay = now.TimeOfDay; byte[] bytes = BitConverter.GetBytes(span.Days); byte[] array = BitConverter.GetBytes((long)(timeOfDay.TotalMilliseconds / 3.333333)); Array.Reverse(bytes); Array.Reverse(array); Array.Copy(bytes, bytes.Length - 2, destinationArray, destinationArray.Length - 6, 2); Array.Copy(array, array.Length - 4, destinationArray, destinationArray.Length - 4, 4); Array.Reverse(destinationArray); return new Guid(destinationArray); }
Bu yöntem tarihi baz aldığından çakışma sorunları ortaya çıkartabiliyor. Zamanın doğrudan kullanılmasıyla ilgili bir problem, çok daha fazla çarpışma riski getirmenizdir; sıkı döngü Guid oluşturma (örneğin, sırayla birkaç tane oluştururken tekrarlamadan kaçınmak), yani senkronizasyon, vb. için endişelenmeniz gerekecek ve birden fazla makine paralel olarak yoğun bir şekilde çalışıyorsa daha da zahmetli hale gelecektir. .
Bu ilk yöntemi vermiş oldum. Diğer yöntem ise bu yönteme göre daha güvenli duruyor. Şimdi o yöntemi ve vereyim.
Bu yöntemde bir DLL kullanarak yapıyoruz. Elbette bu DLL Windows’un kendi DLL ‘idir.
[DllImport("rpcrt4.dll", SetLastError = true)] static extern int UuidCreateSequential(out Guid guid); public static Guid SequentialGuid() { const int RPC_S_OK = 0; Guid g; if (UuidCreateSequential(out g) != RPC_S_OK) return Guid.NewGuid(); else return g; }
İkinci yöntem de bu şekilde. Bu iki yöntemde çalıştırıldıktan sonra sıralı olarak Guid oluşturmaktadır.
Bu dersimde de SQL üzerinden Sıralı Guid nasıl oluşturulur onu görebilirsiniz.
C# GUID ve Sıralı GUID Oluşturma, dersimizde bu kadardı dostlar. Diğer derslerimizde görüşmek üzere. Bu dersimin içeriğini Github projeme dahil etme gereği duymadım.
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…
Bu ders C# Eğitim Setime eklediğim 107. Derstir. Bu eğitim çok daha büyüyecektir. Yani ben yazılımcı olduğum sürece ve bu site açık kaldığı sürece sürekli olarak yeni dersler eklenecektir.
Sağlıcakla ve takipte kalın. ;)
Everything is very open with a clear explanation of the issues.
It was really informative. Your website is
extremely helpful. Many thanks for sharing!
Thanks for kind comment :)