C# GUID ve Sıralı GUID Oluşturma

C# GUID ve Sıralı GUID Oluşturma

4 Ocak 2019 0 Yazar: Mustafa BÜKÜLMEZ
Toplam Görüntülenme : 171
Yaklaşık okuma süresi : 5 DK
C# Linq To XML ile XML Dosyalarla Çalışmak
C# NotifyIcon Kullanımı ve C# NotifyIcon Bildirimleri
C# GUID ve Sıralı GUID Oluşturma
5 (100%) 1 Oy

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 ( ( ) )

 

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. .

İlgili İçerik  C# Tarih OADate Dönüşümleri

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# eğitim seti sayfasına gitmek için tıklayabilirsiniz.

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. 😉

C# Linq To XML ile XML Dosyalarla Çalışmak
C# NotifyIcon Kullanımı ve C# NotifyIcon Bildirimleri