Salı, Kasım 28, 2006

SQL Server'da Otomatik Artan Sahaların Başlangıç Değerini Değiştirme

Merhabalar,

SQL Server'daki tablolarda otomatik artan sahaların başlangıç değerlerini ve artış miktarlarını değiştirebilme ihtiyacı duyarız bazen. Şimdi bunu yapabilmek için küçük bir ipucu vereyim.

Aşağıdaki sorgu çalıştırıldığı zaman istediğimiz işlemi gerçekleştiriyoruz.

DBCC CHECKIDENT (tablo_adi, ReSeed, baslangic_degeri)
GO


İyi Çalışmalar,

Cuma, Kasım 10, 2006

Dosya İşlemlerinde Path Sınıfı

Merhaba,

Dosya işlemleri yaparken Path diye bir sınıf vardır, belki dikkat etmişsinizdir, bu sınıfın dosya uzantılarını değiştirmeye yarayan ChangeExtension diye bir metodu var. Ancak bu metod her koşulda çalışmamaktadır. Örneğin sistem dosyalarının uzantısını değiştiremezsiniz.

' VB
Dim ourPath As String = "c:\boot.ini"
Path.ChangeExtension(ourPath, "bak")


// C#
string ourPath = @"c:\boot.ini";
Path.ChangeExtension(ourPath, "bak");


Bu kodlar boot.ini dosyası sistem dosyası olduğu için çalışmayacaktır.

İyi Çalışmalar,

Çarşamba, Kasım 08, 2006

Generics

Merhaba,

Bu sefer seçtiğim konu Generics kavramı niye bu konuyu seçtiğimi merak ediyorsunuzdur. Öncelikle Generic'leri kullanmanın yararlarından bahsederek bu merakınızı giderelim.

1) Çalışma zamanında oluşacak tip çevrim hatalarını en aza indirmeyi sağlar. Çünkü Object tipi ile çalışırken oluşacak tip dönüşüm hataları çalışma zamanında yakalanır. Ancak Generic'lerle çalışırken tip zorunluluğu olduğu için tip dönüşüm hataları derleme esnasında yakalanır.

2) Tip dönüşüm işlemleri Boxing ve UnBoxing'e neden olacağı için daha fazla bellek alanına ihtiyaç duyar ve bu da performansı düşürür. Generic kullanımında ise tip önceden belli olduğu için çevrime gerek kalmaz.

Bu kadar anlattık örnek vermezsek olmaz şimdi :

' VB(Sınıf yaratılması)
Class Obj
Public V1 As Object
Public V2 As Object
40 Chapter 1 Framework Fundamentals
Public Sub New(ByVal _V1 As Object, ByVal _V2 As Object)
V1 = _V1
V2 = _V2
End Sub
End Class


'Generic sınıf yaratılması
Class Gen(Of T, U)
Public V1 As T
Public V2 As U
Public Sub New(ByVal _V1 As T, ByVal _V2 As U)
V1 = _V1
V2 = _V2
End Sub
End Class


// C#(Sınıf yaratılması)
class Obj
{
public Object t;
public Object u;
public Obj(Object _t, Object _u)
{
t = _t;
u = _u;
}
}


//Generic sınıf yaratılması
class Gen
{
public T t;
public U u;
public Gen(T _t, U _u)
{
t = _t;
u = _u;
}
}


Generic sınıfları kullanırken ise;

'VB
Dim gb As New Gen(Of Double, Integer)(10.125, 2005)
Console.WriteLine(gb.V1 + gb.V2)


//C#
Gen gb = new Gen(10.125, 2005);
Console.WriteLine(gb.t + gb.u);


İyi Çalışmalar

Boxing ve UnBoxing

Merhaba,

Referens type'dan value type'a dönüşüm yapılıyorsa bu UnBoxing oluyor. Hemen örneğini de verelim.

' VB
Dim o As Object = 123
Dim i As Integer = CType(o, Integer)


// C#
object o = 123;
int i = (int) o;


Eğer Value type'dan referans type'a dönüşüm oluyorsa da buna Boxing adı verilir.

' VB
Dim i As Integer = 123
Dim o As Object = CType(i, Object)


// C#
int i = 123;
object o = (object) i;


Tabi bu örnekleri daha iyi anlamak için reference type değerlerin bellek bölgesinde bir adrese işaret ettiğini, value type'ların ise direk değeri içerdiğini hatırlamamızda fayda var.

İyi Çalışmalar

Salı, Kasım 07, 2006

String'leri Birleştirirken Dikkat Etmeli!

Uzun bir aradan sonra tekrar merhaba, tezdi kitapdı derken blogumdan sizlere seslenebilmek için tekrar vakit bulabildim. Bu sefer vereceğim ipucu eminim ki çoğu yazılımcı tarafından bilinmeyen bir konudur.

Stringlerle çalışırken birçok yazılımcının bilmediği birşeyi keşfettim. String ifadeleri birbiri ardına eklerken kullandığımız + operatörünün aslında bellekte gereksiz stringler yarattığını farkettim. Bir örnek ile açıklayalım en iyisi :

string s;

s = "bir";
s+= " deneme";
s+= " metni";
s+=" oluşturalım";


Bu ifadenin sonunda s değişkenimizde "bir deneme metni oluşturalım" ifadesi yer alır. Buraya kadar herşey normal, ancak bu işlem sonucunda 4 tane string değişken oluşturulur ve bunların hepsi bellekte yer kaplar, ancak biz sadece sonuncusunun referansına erişebiliriz, diğer 3'ü ise GarbageCollector tarafından toplanmayı bekleyerek bellekte yer işgal eder. Bundan kaçınmamız için tabi ki .NET framework içerisinde yöntemler mevcuttur :

1) String işlemler için Concat, Join ve Format metodlarını kullanmak

2) Çoklu string birleştirme işlemi için StringBuilder nesnesini kullanmak. Ona da örnek verelim de tam olsun :

string s;
StringBuilder sb = new StringBuilder(30);

sb.Append("bir");
sb.Append(" deneme");
sb.Append(" metni");
sb.Append(" oluşturalım");

s=sb.ToString();


İyi Çalışmalar