- Katılım
- 6 Kasım 2011
- Mesajlar
- 7,337
- Reaksiyon puanı
- 3,156
- Puanları
- 1,358
Merhaba arkadaşlar.
Bugün yeni bir sohbet dizisiyle karşınızdayım.
Birkaç gündür Windows içerisindeki asıl adı "regedit.exe" olan, Registry Editor şeklinde geçen ve Windows'un dahili veritabanını yöneten sistem ile uğraşıyorum.
Bunun sonucunda bazı tecrübe ve görüşlerimi sizlerle paylaşmak istedim.
Hadi başlayalım.
0 - Regedit Sistemi Neden Var ?
Programların birtakım parametlere ihtiyacı vardır ve bunların bir kısmı çalışma esnasında grafiksel arayüz üzerindeki ayarlar kısmından değiştirilebilir.
Bu ayarlar standart olarak "*.ini" dosyası şeklinde tabir edilen ama farklı formatlarda da olabilen (Misal Firefox için "*.js") ASCII karakter dizilerinden oluşur.
Microsoft firması, Windows 3.1 zamanında yani 1992 yılında, bu ayarları farklı dosyalarda dağıtacağımıza, tek bir veritabanı üzerinden erişelim fikrini ortaya atıyor ve bu karanlık çukurun temelleri atılıyor.
Aslında iyi bir fikir gibi görünen Regedit sistemini inceledikten sonra, hiç de iyi bir fikir olmadığını, dahası çok yanlış şekilde kullanıldığını ve zamanla Windows içerisinde neyin girip neyin çıktığı belli olmayan bir karadeliğe dönüştüğünü gözlemledim.
Bunu elbet benden önce gözlemleyen ve benim aksime çok daha resmi yazılarla belirtenler olmuş, birkaç örnek vereyim.
Was The Windows Registry a Good Idea?
The Windows Registry – It seemed like a good idea at the time
What is the advantage of the Windows Registry vs. text files like every other OS? • r/sysadmin
Şimdi de kendi kişisel görüşlerimden bahsedeyim.
1 - Native Data Tipleri
Bunu elbet veritabanı uzmanları daha iyi bilir lakin bir veritabanı oluştururken ilk önceliklerden biri buraya kaydedilecek veri tiplerinin programların kullanacağı veri tipleri ile uyumlu olmasıdır yoksa sürekli veri tipleri arasında static veya dynamic casting ile çevrilmeler meydana gelir ve bu da performansı düşürür.
Regeditte kullanılan data tiplerine bakalım.
int32 ?, float32 ? float64 ? bool ? int16 ? int8 ? char ?
Registry Value Types (Windows)
Nedense programların çoğunlukla kullandığı string hariç hiçbir veri tipi bulunmamakta ve expandable string gibi neden kullandığını Microsoft'un bile bilmediğini tahmin ettiğim garip çeşitler bulunmakta. Bu durum tipler arasında çevrimden ötürü performansı azaltmakta. Buradaki binary tipinden daha sonra ayrıntılı bir şekilde bahsedeceğim.
Sadece bununla sınırlı değil, eğer veritabanımız yukarıda bahsettiğim değerlere sahip olsaydı, belki de şu anki boyutunun 10'da 1'i kadar küçük olabilirdi çünkü misal birçok bool değeri aslında 1 bit olmasına rağmen yokluktan ötürü 32 bit dword olarak kaydedilmekte yani olması gerekenden 32 kat daha büyük.
Bu yokluk sadece boyutu değil, performansı da etkiliyor.
2 - Index Sıralama Optimizasyonu
Bunu da elbet veritabanı uzmanları daha iyi bilir lakin veritabanlarındaki değerlerin belli süre sonra optimize edilmesi gerekir. (Eğer ki girdiyi eklediğiniz, sildiğiniz veya güncellediğiniz an optimize edilmiyorsa veya belli sürelerde otomatik olarak bu işlem yapılmıyorsa) Bunun nedeni, belli süre sonra veritabanındaki index sıralarının değişmesinden ötürüdür. Regedit üzerine hergün onbinlerce veri girip çıkmasına rağmen, hiçbir zaman veritabanında optimizasyon veya bakım işlemleri yapılmaz.
Örnek vereyim.
Burada en sonda bulunan GuidCache girdisi aslında alfabe sırasına göre en başta bulunmalıydı, buradan anlıyoruz ki bu veri ya sonradan eklenmiş ya da değişmiş ve index sırası bozulmuş. Dolayısıyla bu şekilde onbinlerce girdi, belli süre sonra Regedit performansını düşürmekte.
3 - Kategorizasyon
Bugüne kadar çok kötü kategorize edilmiş hayata dair birtakım detaylar gördüm ama registry kadar kötüsüne sanırım şahit olmadım. Aynı kategoriye ait olması gereken binlerce ayar, binlerce farklı yere umarsızca dağılmış durumda.
Misal şu penceredeki her bir ayar, bambaşka bir kategoride bulunuyor.
Bu durum az da olsa performansı da etkiliyor çünkü bu ayarlar ard arda olsa, çok hızlı sürede sequential okuma veya yazma ile yapılacakken, tek bir ayar grubu sandığımız değerlerin kaydı ve okunması sırasında belki de binlerce farklı kategori aşındırılıyor.
Daha da kötüsü, aynı ayar için birden fazla bambaşka yerlerde Regedit girdisi bulunabiliyor.
Misal DPI ayarlarını registry üzerinden değiştirmeye kalkarsanız, şunu yapmanız gerekiyor.
Bunun rezillik olduğunu iddia etmek, çok da iddialı bir iddia olmaz, neden sadece tek bir tane ayarı değiştirebilmek için, bu kadar farklı girdiyle uğraşmamış gerekiyor ?
4 - Kullanıcı Ayarları
Buraya Linux ile örnek vererek başlayayım çünkü Linux gerçekten bu işi kendi kafasına göre değil de, standartlara göre yapan ve hakkıyla yapan bir işletim sistemi. Misal Linux'te her programın varsayılan ayarları olur ve bu ayarlar ya binary içinde gömülü olur, ya da root içerisinde erişim izni olmayan bir ini dosyasında saklı olur. Bunun dışında sadece iki adet kullanıcı profiliyle bu ayarlar override edilebilir, o anki kullanıcıya ait profil ve root yani yönetici profili. Kullanıcı root olarak açarsa ikinci, standart açarsa birinci bahsettiğim profil override dosyası devreye girer. Eğer bu profil dosyaları kayıpsa, binary sistem bu ayarları varsayılan ayarların tamamını kopyalayarak oluşturabilir veya sadece program açıldıktan sonra, varsayılan bir ayar değişirse, sadece değişen ayarları dahil eden bir "*.ini" dosyası oluşturabilir.
Bundan daha iyisini, ben düşünemiyorum. İşte bu yüzden, misal fabrika ayarlarına reset etmek çok kolaydır, home klasöründeki user içeriğine bağlı herşeyi silerseniz, sanki yeni format atmış gibi ayarlarınız olur.
Gelelim Regedit'e.
HKEY_CURRENT_USER vardır. HKEY_LOCAL_MACHINE vardır. Bunların hangisinin ne zaman, hangi koşulda, hangisini override edeceği belli değildir ve programı yazana bağlıdır. Bazı CURRENT_USER değerleri LOCAL_MACHINE'ni override eder, bazı LOCAL_MACHINE değerleri CURRENT_USER'ı override eder. Bazı girdiler sadece LOCAL_MACHINE için geçerlidir, bazı girdiler ise sadece CURRENT_USER için geçerlidir ve bu durumu, dökümantasyonda yazmıyorsa, kendi başınıza tahmin etmek olası değildir.
Bu da yetmezmiş gibi HKEY_USERS içerisinde birçok profil vardır(Bunlardan bir tanesi CURRENT_USER profilidir, zaten CURRENT_USER aslında sadece oradaki profillerden birini işaret eden bir pointer, yani shortcut'dır.) Bu profillerden DEFAULT profili ile LOCAL_MACHINE profili arasında anlam karmaşası vardır misal Login Screen üzerindeki mouse ayarları Local Machine'den değil nedense Default'tan alır. Bu da yetmezmiş gibi bazı programlar buraya kendi kullanıcı profilini üretir. (Bir kullanıcı için birden çok kullanıcı profili ?) Misal Nvidia buraya kendi profilini koyar, basit olması için örnek vereyim, yarın NVIDIA buraya fare hız ayarı koysa, Nvidia Control Panel programındaki pencereye gelince fareniz daha hızlı çalışır, diğer programlardaki pencereye gelince daha yavaş. Bu da yetmezmiş gibi HKEY_CURRENT_CONFIG diye birşey vardır ve bu anahtar neyi ne zaman override eder, ben de bilmiyorum.
5 - Zihniyet Bozuklukları
Eğer bir ayarı kullanıcının değiştirmesini istemiyorsanız ,onu ayar yapmazsınız olur biter. Misal FIFA oyununda futbol takımları 11 kişiden oluşur ve bunu değiştirmek için ayar yoktur. Eğer ayar olsaydı değiştirmek mümkün olurdu. Lakin hem ayar koyup, hem de kullanıcı bunu değiştirmesin diye o ayarı kapatmak bir takım zihniyet bozuklukları olduğuna işaret eder.
Bahsettiğim birden fazla durumu kapsamakta. Birincisi Regedit içerisindeki girdilerin bir kısmı aslında yoktur ama siz koyarsanız olur. (Ben yaptım oldu)
Madem böyle bir ayar var ve mümkün, neden koymuyorsun? En azından görmüş olur kullanıcı(burada kullanıcı dediğime bakmayın, sistem yöneticisi vs), madem kullanıcının onu değiştirmesini istemiyorsun, neden öyle bir ayar yapıyorsun ?
Benzeri durum dökümantasyonlar için de geçerli. Microsoft'un Regedit dökümantasyonu pek de iç açıcı değildir ve çoğu girdiden hiç bahsetmez bile. Madem bahsetmeyeceksin, neden yaptın? Madem yaptın neden bahsetmiyorsun ?
Bir başka zihniyet bozukluğu binary yani hex kısmında karşımıza çıkar. Öncelikle bir girdiyi binary yapmak o girdiyi sadece programın anlayabileceği bir formata dönüştürdüğünden ötürü kullanıcının değiştirmesini engellemek ile benzer anlama gelir. Madem kullanıcının değiştirmesini istemiyorsun, neden o ayarı koyuyorsun sorusu burada da sorulabilir. Bu durumun aslında bir miktar kapalı kaynak kod yapısının da ayar kısmına yansıması olduğunu düşünüyorum. Yani kodlarımın kapalı olduğu gibi ayarlarım da kapalı olsun ve benden başka kimse değiştiremesin dikdatörlüğü devreye giriyor ve Linux'un aksine kullanıcının(sistem yöneticilerinin) özgürlüklerini kısıtlamak adına yeni yöntemler geliştiriliyor.
Bunun performansa da etkisi olabilir. Öyle ki siz 100mb'lık kendi programınızı bu binary girdileri sayesinde regedit'e gömebilirsiniz ve yarın herkes sizin gibi yapsa, belli süre sonra regedit tek bir girdiyi okumak için bile gigabytelarca verinin okunması gereken, gereksiz bir çuval yığın haline gelme tehlikesini barındırmaktadır. Şu an bu durum olmasa bile ileride olmayacağını kim garanti edebilir ?
Şimdi böyle diyince ben de korktum ve acaba abarttım mı diyerek Microsoft'un sitesine baktım ama maalesef haklıyım. Regedit içerisindeki girdilerin max boyutu, sistemdeki hafıza boyutuyla eşdeğer.
Registry Element Size Limits (Windows)
Hatta Microsoft da bu durum için 2048 byte'dan büyük dosyaları ini şeklinde saklayın ve bu ini dosyalarının sadece yerini string olarak regedit içerisinde saklayın ki verimlilik bozulmasın öğüdünü vermiş.
6 - Tembel Programlar
Programlar yüklenme esnasında ve kullanılma esnasında regedit içerisine ayarlarını kaydederler lakin sanki aralarında gizli bir anlaşma varmış gibi çoğu silinirken buradaki kayıtları silmezler. Dolayısıyla çok fazla program yükleyip silen bir kullanıcı belli süre sonra onbinlerce gereksiz girdiyle baş başa kalabilir. Bunların bir kısmını Regedit temizleyiciler tespit edebilir ama kalan yarısını tespit etmesi mümkün değildir.
7 - Parçalanma
Regedit kayıtları eklenip silindikçe, belli süre sonra parçalanmaya başlar ve standart disk birleştirici regedit kayıtlarını birleştiremez. (Güvenlik ve kullanılan sistem dosyalarının yerinin değiştirilme kuralından ötürü) Bu da performansı etkiler lakin en azından bunun çözümü var. IOBit gibi bazı firmalara ait disk birleştirici yazılımları, bilgisayar başlangıcında, kullanıcı ekranı gelmeden önce disk birleştirme yaparak, bu gibi dosyaları birleştirebilmekte lakin Microsoft'un kendi başına dahili bir çözümü yok.
8 - Taşınabilirlik
Hangi programın hangi kayıtlara eriştiği, hangilerini eklediği, hangileri çıkardığı bilinmediğinden (Bunu çok özel programlarla detaylı analiz etmediğiniz sürece) Regedit kullanan programların portable olabilmesi teknik olarak çok zordur. Ayrıca diğer işletim sistemlerinde bulunmadığından ötürü, multi-platform programlarda sıkıntı çıkarır.
9 - gpedit.msc
Asıl adı "gpedit.msc" olan, Group Policy Editor olarak da bilinen ve Windows'un Home sürümlerinde bulunmayan bu yazılımımız, Regeditteki bazı ayarları override etmekte. (Sanki yukarıda belirttiğim üzere regedit'in kendi içerisinde override karmaşası yaşanmıyormuş gibi) Yani siz ne yaparsanız yapın o kural için Group Policy atanmışsa Regedit ayarı geçersiz kılınıyor. Bu durumun her zamanki gibi performansa da etkisi var çünkü her kural için işletim sistemi önce Group Policy'e kayıtlı bir kural var mı diye bakmak için uğruyor.
10 - Farklı Ayarları Tek Bir Girdide Birleştirme
Önceki konularda bir ayarı değiştirmek için onlarca girdiyi değiştirmemiz gerektiğinden bahsetmiştik, şimdi ise farklı ayarların tek bir girdide toplanmasından bahsedeceğiz. Elbette ki burada Regedit'in kendi suçu yok ancak yanlış kullanımından kaynaklanan bir sorun söz konusu.
Misal "HKEY_CURRENT_USER\Control Panel\Desktop" içerisindeki UserPreferencesMask değeri 32 farklı ayarı tek bir girdide barındırır yani bu girdide bulunan bir ayarı değiştirebilmek için, öncelikle parametreyi 2'lik bit sistemine çevireceğiz, sonra bizim ayarımız hangi bit üzerinde yer alıyor bulacağız, değiştireceğiz, en sonunda bu bit serisini tekrar hex'e çevirip kaydedeceğiz. Tahmin edeceğiniz üzere bu durum kolaylık değil ciddi bir zorluk barındırıyor.
UserPreferencesMask
Gelelim sonuca;
İşte bu gibi sebeplerden ötürü, Linux işletim sistemleri, tek bir elde toplanmış dahili veri tabanı yerine, her programın user profile içerisinde, kendi ayarlarını, kendi istediği alana kaydettiği *.ini" kayıt sistemlerini tercih etmekte ve ben de doğru seçimin bu olduğunu kendi tecrübelerim sonucunda vardığım görüş itibarıyla düşünmekteyim.
--- Gönderi Güncellendi ---
Benden izin almanıza gerek olmaksızın, istediğiniz yerde yazıyı yayınlayabilirsiniz.
Bugün yeni bir sohbet dizisiyle karşınızdayım.
Birkaç gündür Windows içerisindeki asıl adı "regedit.exe" olan, Registry Editor şeklinde geçen ve Windows'un dahili veritabanını yöneten sistem ile uğraşıyorum.
Bunun sonucunda bazı tecrübe ve görüşlerimi sizlerle paylaşmak istedim.
Hadi başlayalım.
0 - Regedit Sistemi Neden Var ?
Programların birtakım parametlere ihtiyacı vardır ve bunların bir kısmı çalışma esnasında grafiksel arayüz üzerindeki ayarlar kısmından değiştirilebilir.
Bu ayarlar standart olarak "*.ini" dosyası şeklinde tabir edilen ama farklı formatlarda da olabilen (Misal Firefox için "*.js") ASCII karakter dizilerinden oluşur.
Microsoft firması, Windows 3.1 zamanında yani 1992 yılında, bu ayarları farklı dosyalarda dağıtacağımıza, tek bir veritabanı üzerinden erişelim fikrini ortaya atıyor ve bu karanlık çukurun temelleri atılıyor.
Aslında iyi bir fikir gibi görünen Regedit sistemini inceledikten sonra, hiç de iyi bir fikir olmadığını, dahası çok yanlış şekilde kullanıldığını ve zamanla Windows içerisinde neyin girip neyin çıktığı belli olmayan bir karadeliğe dönüştüğünü gözlemledim.
Bunu elbet benden önce gözlemleyen ve benim aksime çok daha resmi yazılarla belirtenler olmuş, birkaç örnek vereyim.
Was The Windows Registry a Good Idea?
The Windows Registry – It seemed like a good idea at the time
What is the advantage of the Windows Registry vs. text files like every other OS? • r/sysadmin
Şimdi de kendi kişisel görüşlerimden bahsedeyim.
1 - Native Data Tipleri
Bunu elbet veritabanı uzmanları daha iyi bilir lakin bir veritabanı oluştururken ilk önceliklerden biri buraya kaydedilecek veri tiplerinin programların kullanacağı veri tipleri ile uyumlu olmasıdır yoksa sürekli veri tipleri arasında static veya dynamic casting ile çevrilmeler meydana gelir ve bu da performansı düşürür.
Regeditte kullanılan data tiplerine bakalım.
int32 ?, float32 ? float64 ? bool ? int16 ? int8 ? char ?
Registry Value Types (Windows)
Nedense programların çoğunlukla kullandığı string hariç hiçbir veri tipi bulunmamakta ve expandable string gibi neden kullandığını Microsoft'un bile bilmediğini tahmin ettiğim garip çeşitler bulunmakta. Bu durum tipler arasında çevrimden ötürü performansı azaltmakta. Buradaki binary tipinden daha sonra ayrıntılı bir şekilde bahsedeceğim.
Sadece bununla sınırlı değil, eğer veritabanımız yukarıda bahsettiğim değerlere sahip olsaydı, belki de şu anki boyutunun 10'da 1'i kadar küçük olabilirdi çünkü misal birçok bool değeri aslında 1 bit olmasına rağmen yokluktan ötürü 32 bit dword olarak kaydedilmekte yani olması gerekenden 32 kat daha büyük.
Bu yokluk sadece boyutu değil, performansı da etkiliyor.
2 - Index Sıralama Optimizasyonu
Bunu da elbet veritabanı uzmanları daha iyi bilir lakin veritabanlarındaki değerlerin belli süre sonra optimize edilmesi gerekir. (Eğer ki girdiyi eklediğiniz, sildiğiniz veya güncellediğiniz an optimize edilmiyorsa veya belli sürelerde otomatik olarak bu işlem yapılmıyorsa) Bunun nedeni, belli süre sonra veritabanındaki index sıralarının değişmesinden ötürüdür. Regedit üzerine hergün onbinlerce veri girip çıkmasına rağmen, hiçbir zaman veritabanında optimizasyon veya bakım işlemleri yapılmaz.
Örnek vereyim.
Kod:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\BCD00000000\Description]
"KeyName"="BCD00000000"
"System"=dword:00000001
"TreatAsSystem"=dword:00000001
"GuidCache"=hex:c2,14,33,11,b1,ca,d2,01,08,27,00,00,03,99,c2,d7,d3,85,26,88,16,\
00,00,00
3 - Kategorizasyon
Bugüne kadar çok kötü kategorize edilmiş hayata dair birtakım detaylar gördüm ama registry kadar kötüsüne sanırım şahit olmadım. Aynı kategoriye ait olması gereken binlerce ayar, binlerce farklı yere umarsızca dağılmış durumda.
Misal şu penceredeki her bir ayar, bambaşka bir kategoride bulunuyor.
Bu durum az da olsa performansı da etkiliyor çünkü bu ayarlar ard arda olsa, çok hızlı sürede sequential okuma veya yazma ile yapılacakken, tek bir ayar grubu sandığımız değerlerin kaydı ve okunması sırasında belki de binlerce farklı kategori aşındırılıyor.
Daha da kötüsü, aynı ayar için birden fazla bambaşka yerlerde Regedit girdisi bulunabiliyor.
Misal DPI ayarlarını registry üzerinden değiştirmeye kalkarsanız, şunu yapmanız gerekiyor.
Kod:
Windows Registry Editor Version 5.00
[-HKEY_CURRENT_USER\Control Panel\Desktop\PerMonitorSettings]
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Hardware Profiles\Current\Software\Fonts]
"LogPixels"=dword:00000096
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontDPI]
"LogPixels"=dword:00000096
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\FontDPI]
"LogPixels"=dword:00000096
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\0000\Software\Fonts]
"LogPixels"=dword:00000096
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\0001\Software\Fonts]
"LogPixels"=dword:00000096
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Hardware Profiles\Current\Software\Fonts]
"LogPixels"=dword:00000096
[HKEY_CURRENT_CONFIG\Software\Fonts]
"LogPixels"=dword:00000060
[HKEY_CURRENT_USER\Control Panel\Desktop]
"DesktopDPIOverride"=dword:00000000
"LogPixels"=dword:00000096
"Win8DpiScaling"=dword:00000000
[HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics]
"AppliedDPI"=dword:00000096
Bunun rezillik olduğunu iddia etmek, çok da iddialı bir iddia olmaz, neden sadece tek bir tane ayarı değiştirebilmek için, bu kadar farklı girdiyle uğraşmamış gerekiyor ?
4 - Kullanıcı Ayarları
Buraya Linux ile örnek vererek başlayayım çünkü Linux gerçekten bu işi kendi kafasına göre değil de, standartlara göre yapan ve hakkıyla yapan bir işletim sistemi. Misal Linux'te her programın varsayılan ayarları olur ve bu ayarlar ya binary içinde gömülü olur, ya da root içerisinde erişim izni olmayan bir ini dosyasında saklı olur. Bunun dışında sadece iki adet kullanıcı profiliyle bu ayarlar override edilebilir, o anki kullanıcıya ait profil ve root yani yönetici profili. Kullanıcı root olarak açarsa ikinci, standart açarsa birinci bahsettiğim profil override dosyası devreye girer. Eğer bu profil dosyaları kayıpsa, binary sistem bu ayarları varsayılan ayarların tamamını kopyalayarak oluşturabilir veya sadece program açıldıktan sonra, varsayılan bir ayar değişirse, sadece değişen ayarları dahil eden bir "*.ini" dosyası oluşturabilir.
Bundan daha iyisini, ben düşünemiyorum. İşte bu yüzden, misal fabrika ayarlarına reset etmek çok kolaydır, home klasöründeki user içeriğine bağlı herşeyi silerseniz, sanki yeni format atmış gibi ayarlarınız olur.
Gelelim Regedit'e.
HKEY_CURRENT_USER vardır. HKEY_LOCAL_MACHINE vardır. Bunların hangisinin ne zaman, hangi koşulda, hangisini override edeceği belli değildir ve programı yazana bağlıdır. Bazı CURRENT_USER değerleri LOCAL_MACHINE'ni override eder, bazı LOCAL_MACHINE değerleri CURRENT_USER'ı override eder. Bazı girdiler sadece LOCAL_MACHINE için geçerlidir, bazı girdiler ise sadece CURRENT_USER için geçerlidir ve bu durumu, dökümantasyonda yazmıyorsa, kendi başınıza tahmin etmek olası değildir.
Bu da yetmezmiş gibi HKEY_USERS içerisinde birçok profil vardır(Bunlardan bir tanesi CURRENT_USER profilidir, zaten CURRENT_USER aslında sadece oradaki profillerden birini işaret eden bir pointer, yani shortcut'dır.) Bu profillerden DEFAULT profili ile LOCAL_MACHINE profili arasında anlam karmaşası vardır misal Login Screen üzerindeki mouse ayarları Local Machine'den değil nedense Default'tan alır. Bu da yetmezmiş gibi bazı programlar buraya kendi kullanıcı profilini üretir. (Bir kullanıcı için birden çok kullanıcı profili ?) Misal Nvidia buraya kendi profilini koyar, basit olması için örnek vereyim, yarın NVIDIA buraya fare hız ayarı koysa, Nvidia Control Panel programındaki pencereye gelince fareniz daha hızlı çalışır, diğer programlardaki pencereye gelince daha yavaş. Bu da yetmezmiş gibi HKEY_CURRENT_CONFIG diye birşey vardır ve bu anahtar neyi ne zaman override eder, ben de bilmiyorum.
5 - Zihniyet Bozuklukları
Eğer bir ayarı kullanıcının değiştirmesini istemiyorsanız ,onu ayar yapmazsınız olur biter. Misal FIFA oyununda futbol takımları 11 kişiden oluşur ve bunu değiştirmek için ayar yoktur. Eğer ayar olsaydı değiştirmek mümkün olurdu. Lakin hem ayar koyup, hem de kullanıcı bunu değiştirmesin diye o ayarı kapatmak bir takım zihniyet bozuklukları olduğuna işaret eder.
Bahsettiğim birden fazla durumu kapsamakta. Birincisi Regedit içerisindeki girdilerin bir kısmı aslında yoktur ama siz koyarsanız olur. (Ben yaptım oldu)
Madem böyle bir ayar var ve mümkün, neden koymuyorsun? En azından görmüş olur kullanıcı(burada kullanıcı dediğime bakmayın, sistem yöneticisi vs), madem kullanıcının onu değiştirmesini istemiyorsun, neden öyle bir ayar yapıyorsun ?
Benzeri durum dökümantasyonlar için de geçerli. Microsoft'un Regedit dökümantasyonu pek de iç açıcı değildir ve çoğu girdiden hiç bahsetmez bile. Madem bahsetmeyeceksin, neden yaptın? Madem yaptın neden bahsetmiyorsun ?
Bir başka zihniyet bozukluğu binary yani hex kısmında karşımıza çıkar. Öncelikle bir girdiyi binary yapmak o girdiyi sadece programın anlayabileceği bir formata dönüştürdüğünden ötürü kullanıcının değiştirmesini engellemek ile benzer anlama gelir. Madem kullanıcının değiştirmesini istemiyorsun, neden o ayarı koyuyorsun sorusu burada da sorulabilir. Bu durumun aslında bir miktar kapalı kaynak kod yapısının da ayar kısmına yansıması olduğunu düşünüyorum. Yani kodlarımın kapalı olduğu gibi ayarlarım da kapalı olsun ve benden başka kimse değiştiremesin dikdatörlüğü devreye giriyor ve Linux'un aksine kullanıcının(sistem yöneticilerinin) özgürlüklerini kısıtlamak adına yeni yöntemler geliştiriliyor.
Bunun performansa da etkisi olabilir. Öyle ki siz 100mb'lık kendi programınızı bu binary girdileri sayesinde regedit'e gömebilirsiniz ve yarın herkes sizin gibi yapsa, belli süre sonra regedit tek bir girdiyi okumak için bile gigabytelarca verinin okunması gereken, gereksiz bir çuval yığın haline gelme tehlikesini barındırmaktadır. Şu an bu durum olmasa bile ileride olmayacağını kim garanti edebilir ?
Şimdi böyle diyince ben de korktum ve acaba abarttım mı diyerek Microsoft'un sitesine baktım ama maalesef haklıyım. Regedit içerisindeki girdilerin max boyutu, sistemdeki hafıza boyutuyla eşdeğer.
Registry Element Size Limits (Windows)
Hatta Microsoft da bu durum için 2048 byte'dan büyük dosyaları ini şeklinde saklayın ve bu ini dosyalarının sadece yerini string olarak regedit içerisinde saklayın ki verimlilik bozulmasın öğüdünü vermiş.
6 - Tembel Programlar
Programlar yüklenme esnasında ve kullanılma esnasında regedit içerisine ayarlarını kaydederler lakin sanki aralarında gizli bir anlaşma varmış gibi çoğu silinirken buradaki kayıtları silmezler. Dolayısıyla çok fazla program yükleyip silen bir kullanıcı belli süre sonra onbinlerce gereksiz girdiyle baş başa kalabilir. Bunların bir kısmını Regedit temizleyiciler tespit edebilir ama kalan yarısını tespit etmesi mümkün değildir.
7 - Parçalanma
Regedit kayıtları eklenip silindikçe, belli süre sonra parçalanmaya başlar ve standart disk birleştirici regedit kayıtlarını birleştiremez. (Güvenlik ve kullanılan sistem dosyalarının yerinin değiştirilme kuralından ötürü) Bu da performansı etkiler lakin en azından bunun çözümü var. IOBit gibi bazı firmalara ait disk birleştirici yazılımları, bilgisayar başlangıcında, kullanıcı ekranı gelmeden önce disk birleştirme yaparak, bu gibi dosyaları birleştirebilmekte lakin Microsoft'un kendi başına dahili bir çözümü yok.
8 - Taşınabilirlik
Hangi programın hangi kayıtlara eriştiği, hangilerini eklediği, hangileri çıkardığı bilinmediğinden (Bunu çok özel programlarla detaylı analiz etmediğiniz sürece) Regedit kullanan programların portable olabilmesi teknik olarak çok zordur. Ayrıca diğer işletim sistemlerinde bulunmadığından ötürü, multi-platform programlarda sıkıntı çıkarır.
9 - gpedit.msc
Asıl adı "gpedit.msc" olan, Group Policy Editor olarak da bilinen ve Windows'un Home sürümlerinde bulunmayan bu yazılımımız, Regeditteki bazı ayarları override etmekte. (Sanki yukarıda belirttiğim üzere regedit'in kendi içerisinde override karmaşası yaşanmıyormuş gibi) Yani siz ne yaparsanız yapın o kural için Group Policy atanmışsa Regedit ayarı geçersiz kılınıyor. Bu durumun her zamanki gibi performansa da etkisi var çünkü her kural için işletim sistemi önce Group Policy'e kayıtlı bir kural var mı diye bakmak için uğruyor.
10 - Farklı Ayarları Tek Bir Girdide Birleştirme
Önceki konularda bir ayarı değiştirmek için onlarca girdiyi değiştirmemiz gerektiğinden bahsetmiştik, şimdi ise farklı ayarların tek bir girdide toplanmasından bahsedeceğiz. Elbette ki burada Regedit'in kendi suçu yok ancak yanlış kullanımından kaynaklanan bir sorun söz konusu.
Misal "HKEY_CURRENT_USER\Control Panel\Desktop" içerisindeki UserPreferencesMask değeri 32 farklı ayarı tek bir girdide barındırır yani bu girdide bulunan bir ayarı değiştirebilmek için, öncelikle parametreyi 2'lik bit sistemine çevireceğiz, sonra bizim ayarımız hangi bit üzerinde yer alıyor bulacağız, değiştireceğiz, en sonunda bu bit serisini tekrar hex'e çevirip kaydedeceğiz. Tahmin edeceğiniz üzere bu durum kolaylık değil ciddi bir zorluk barındırıyor.
UserPreferencesMask
Gelelim sonuca;
İşte bu gibi sebeplerden ötürü, Linux işletim sistemleri, tek bir elde toplanmış dahili veri tabanı yerine, her programın user profile içerisinde, kendi ayarlarını, kendi istediği alana kaydettiği *.ini" kayıt sistemlerini tercih etmekte ve ben de doğru seçimin bu olduğunu kendi tecrübelerim sonucunda vardığım görüş itibarıyla düşünmekteyim.
--- Gönderi Güncellendi ---
Benden izin almanıza gerek olmaksızın, istediğiniz yerde yazıyı yayınlayabilirsiniz.
Son düzenleme: