1. Ana Sayfa
  2. C Sharp

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

C# GUID ve Sıralı GUID Oluşturma
+ - 2

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

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)

Yorumlar (2)

  1. Everything is very open with a clear explanation of the issues.
    It was really informative. Your website is
    extremely helpful. Many thanks for sharing!

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.