Kategoriler


SON YORUMLAR
Tatar Ramazan
Bilgisayar mühendisliğinden şikayet etmeyeyim diyorum ama bütün veriler beni haklı çıkarıyor. Aşağıda yazdık okuyun: Yazılım uzmanı pozisyonu için; 1-) Kariyernette 2000-3000 TL arası maaş veren 100 ilan var. 2-) 3000-6000 arası maş veren 100 ilan 3-) 6000 ve üzeri veren sadece 5 ilan var Bu mu iyi para kazandıran meslek?! Memurluğu iyi ki bırakmamışım. Bir de adamın canını çıkarıyorlar. Her çıkan teknolojiyi öğrenmeni bekliyorlar. İstanbulda kiralar 2000.den başlıyor. 6000 TL bile yüksek maaş falan değil. 2008.de mezun oldum. O zaman da aynı paralar veriliyordu. Zaman geçtikçe aday sayısı artıp rekabet kızıştıkça maaşlar düşüyor, vasatlaşıyor. 2010 yılında 5000 TL kazanan grafikerler duyuyordum. Mesleğimiz yerlerde sürünüyor. Memur olmak ta zorlaşınca uyanık iş veren size iyi para verir mi sanıyorsunuz? Nasıl olsa kaçamazsınız Devlet.e...KPSS zor artık.

yeşekkür ederiz beğendim
Dilara
Merhaba, ben bilgisayar mühendisliği öğrencisiyim yabancı dilimde var ama sitelerden okuduğum yorumlardan dolayı gelecek kaygısı yaşıyorum,nasıl bir yol izlemem gerek lütfen yorumlarınızla bana yardımcı olur musunuz?
sultan b.
makaleniz gerçekten yardımcı ve aydınlatıcı fakat örnekler verirken sürekli .abi, adam. vs özneler kullanmanız beni rahatsız etti. bilgisayar mühendisi olmak isteyen bir kadın olarak açıkçası bu durum beni biraz umutsuzluğa sürüklemedi de değil.
irfan
https://www.udemy.com/linux-and-bash-shell-scripting-from-beginner-to-intermediate/learn/v4/overview
Tatar Ramazan
İlerde düzelecek inşaallahu Teala her şey. Herkes hakkını eninde sonunda alır. Son gülen iyi güler. Başlangıçta bütün mühendisler aynı alır ama kendini geliştiren ilerleyen dönemlerde farkı açar.
tatar ramazan-a
tatar ramazan ağlamayı bırak. kendi şirketini kurma vaktin gelmiş. devletten ayrıl. işveren ol artık. herkesi eleştirmeyi bırak. eleştirilmeyecek bir şirket kur.
bir zamanlar anadoluda
zamanında iyi sürünmüş, iyi aşağılanmış ve itlerin çakalların arasında yaşamış, onlarla savaşmış itliği çakallığı halen öğrenen birisi olarak tavsiyeler: 1- kendini geliştirmek tam bir saçmalıktır (Google vb. mülakatlara falan girmek gibi durumlar hariç) 2- herşey çevrenle başlar çevrenle biter, iş bulma da karı da kız da çevrene bakar. başta suratıma bile bakmayan kızlar, popülerlğimi (milletçe akıllı, çalışkan, başarılı, zengin, cool diye nitelenmek gibi) görünce köpeğim oldu selam dahi vermiyorum yine rahat vermiyorlar. 3- nasıl populer oldum? çalışarak mı? en az çalışanlardandım. 4- algıyı yöneteceksiniz. kendinizi satmayı bileceksiniz. reklamınızı yapacaksınız. kendini satamazsanız ne kız gelir ne iş verirler. 5- o beğenmediğin 3 birimlik erkek veya işe giren eleman, potansiyeli 1 ise 3 gösterir sen 10 ken bişr gösteremezsen, ne karı gelir ne birşey. yarın karın da sygı duymaz gözünün önünde başkasıyla sikişir.
Tatar Ramazan
Site sahibine 2008 de mail atmıştım danışmıştım. O günden beri siteyi takip ederim. Ateşli yazıları kendimi geliştirmemde etkili olmuştur. İstanbul üniversitesi iyi eğitim veriyor diye yorum yazan da bendim. Çok uyanığımdır. Zekam keskindir. Keşke üniversitem de biraz yol gösterseydi. Dersler, kitaplar belli sen niye hocalardan rehberlik bekledin diyecek olursanız: Tamam da bir sürü programlama dili var. Hangisinden başlayacağım, ne bileyim? C dilini öğrenin sonra C# veya java dan devam edersiniz diyebilirlerdi. Bunu bile yapamadılar. Bölüm başkanı da değişmişti. İyi şeyler yapayım derken daha kötü batırdı. Nesne tabanlı programlama dersinde for döngüsü gördük C sharpta. En azından takip programı yaptırdı bize işte. ADO.NET, SQL Server öğrendik. Ama sınıf nesne tabanlı programlamayı bir türlü sökemedi. Çünkü C dilinde struct konusunu öğrenmeyince sınıfları da özümsemek zor oldu. Debelendik durduk. İTÜ, Yıldız Teknik, İstanbul gibi üniversitelerin farkı burda. Bu kadar basit! C, C++ dilini iyi veriyor adamlar. Yahu C dilinin konularını tahtaya yazsaydı araştırma görevlisi bana yeterdi bile. Mıy mıy mıy yapıp durdular 4 sene boyunca. Ben ilk yarıyıl tatilinde (5 haftaydı) evde İntegraldan 200 soru çözüp vize finalden 100-100 almış adamım. Görün işte ben bile geri kalıyorsam programcılıkta öğretimde sorun var demek ki. Site sahibine kalsa üniversite önemli değil. Tabi kendisi İstanbul üniversitesinde iyi eğitim aldı. Kötü öğretimi, ilgisizliği tatmadı.
Tatar Ramazan
Eve şanssızdım her açıdan bundan sonra mutlu olur muyum bilmiyorum. Biz imanlıyız umudumuzu kesmeyiz. Yazdıklarımda doğruluk payı da var ama. Meslek ve sektörde bir sürü sıkıntı var. Sektör yöneticileri ve Üniv. hocaları niye bir araya gelip sorunları çözemiyor. Bilişim sektörü daha verimli büyük olabilirdi. Yazılım çağı diyorsak bu işe bir el atmalıyız. Mesleğimden şikayet ederim ama aynı zamanda ateşli gayretli adamımdır. Üniversitede gene hasta takip programı, satranç oyunu, E-Ticaret sitesi ve irili ufaklı 30 tane program yapmıştım. Çok boş mezun olmadım. Sınıfın ineklerindendim. Marmara bölgesinde 92 den sonra kurulan bir üniversitede okudum. Hocalar ilgisiz ve bilgisizdi. Sınıfın % 70 i C dilini öğrenemeden mezun oldu. Şunu şöyle yapın demekten aciz adamları hoca diye başımıza niye koyuyorlar? Sistemde de saçmalık var. Derslerin çoğu işe yaramıyor. Lise 1 den itibaren programlama çalışsaydım şimdi çok farklı olurdu. Boş yere zaman kaybı okumak. İnsanlara da zulmetmeyin gayrı. Bilim adamı olmak isteyen üniversitede kalsın. Bana Java, .NET, Oracle lazım kardeşim. Okumayanların eşi, arabası var. Ben sürünüp duruyorum. Memur maaşıyla bi şey yapamıyorsun ki. 2 ay önce 5000 tl oldu işte. Harita mühendisine de veriyorlar o kadar zaten. Benim sadece SQL bilgim onları ezmeye yeter.
HARUN AYDIN
YAZI BENİ DE ETKİLEDİ.BENDE BİLGİSAYAR ALANINDA İLERLEMEK İSTİYORUM.İLGİM DE VAR AMA YETERLİ BİLGİM YOK.BU YAZIDA ANLADIM Kİ GEREK DE YOKMUŞ İYİ BİR OKULDAYIM İYİ BİR ÜNİVERSİTE DE KAZANMAK İÇİN ELİMDEN GELENİ YAPICAM. BU YAZI İÇİN ÇOK TEŞEKKÜR EDERİM..
Mehmet Cemil Bayhan
Çok harika bir makale yazmışsınız.Ellerinize sağlık. Beni bayağı gaza getirdi gerçekten. Ben şuan lise 3 öğrencisiyim. Şimdiden bilgisayar hakkında bilgi sahibi olmaya çalışıyordum ama sizin bu yazınızı okuduktan sonra fikrim değişti. Artık şuan düşüneceğim tek şey YGS-LYS. SİZE NE KADAR TEŞEKKÜR ETSEM AZDIR. ÇOOOOOK TEŞEKKÜR EDİYORUM.........😆😉😊
Mehmet Cemil Bayhan
Çok harika bir makale yazmışsın ızgara.Ellerinize sağlık. Beni bayağı gaza getirdi gerçekten. Ben şuan lise 3 öğrencisiyim. Şimdiden bilgisayar hakkında bilgi sahibi olmaya çalışıyordum ama sizin bu yazınızı okuduktan sonra fikrim değişti. Artık şuan düşüneceğim tek şey YGS-LYS. SİZE NE KADAR TEŞEKKÜR ETSEM AZDIR. ÇOOOOOK TEŞEKKÜR EDİYORUM.........😆😉😊
eskidevir-yenidevir
sizin şanssızlığınız olmuş. işler yolunda gitmemiş diye anlıyorum.

Bilgisayar Mühendisleri
Here is the website inspired me to use 
it as a guide when I tried to define 
myself as an engineer candidate a few 
years ago. It really helped me to work
 and study feeling in confidence with 
being on the right way. I suggest this 
website to whom it may direct her/his 
to find the right career path. It 
includes many articles varies from 
real life experiences to detailed 
software engineering issues. But the 
most dignified parts for me are the 
articles in general and career titles.
Son okunan makaleler:
ViewState’in Sunucuda Saklanması
Bilgisayar mühendisliği öldü?
Bilgisayar mühendisliği öldü?
Bir bakışta VB.net ve C# karşılaştırması
Installing ASP.NET
Bilgisayar Mühendisliği Hakkındaki 10 Büyük Yalan!
Yeni mezun bilgisayar mühendisleri için 10 büyük günah!
ViewState Compression
ASP.NET - Database Connection
ASP.NET Web Forms
ASP.NET ile GIS Uygulamaları
Bilgisayar Mühendisleri Kaç Para Alır?
Web Servislerinde Parametre Girisinin Gosterilmesi
Differences between ASP and ASP.NET
DataGrid ve GridView Kontrollerinde Görünmez Kolonlar
Ajax kullananlar için yükleniyor resimleri
Bir bilgisayar mühendisinin bilmesi gereken en temel teknolojiler
ASP .NET - XML Files
ASP.NET - Event Handlers
Asp.Net 2.0 ve Client Script Callback

Bilgisayar Mühendisleri Portalı

ViewState’in Sunucuda Saklanması

 

ASPNET uygulamaları, doğaları gereği, Win32 ortamı içinde çalışan Windows Forms uygulamalarından oldukça farklı yönlere sahiptirler: Bir ASPNET uygulamasının görüntü ve durumunu saklaması, her ne kadar Windows Forms uygulamalarına öykünse de, bir web programcısı için çok farklı yollara başvurma gereği ortaya koyar. Session ve Application objeleri, uygulamayı geliştiren kişinin en önemli olanaklarını belirlemektedir. Ancak pek çok programcı, bunların yanında yadsınamayacak bir değer taşımakta olan ViewState’in varlığını hiçe saymakta, ya da ona değerinin çok altında bir önem vermektedir. Bu makale sizlere ViewState’i genel olarak tanıtacak, alternatif örneklerle, kullanımı konusunda temel bilgiler verecektir.

İçerik:

  • Genel olarak ViewState
  • Getirileri ve götürüleri
    • Performans
    • Güvenlik
  • ViewState’in kullanımı
  • Kullanıma yönelik alternatifler
    • Sunucuda Saklamak
      • Server’ın diski üzerinde saklamak
      • SQL server ya da benzeri bir veri kaynağını kullanmak
      • DataSet ve Session objeleri üzerinde saklamak

Genel Olarak ViewState

ASP.NET ile uygulama geliştirmek, tanımı ve çalışma şekli gereği, “HTML çıktısı veren bir uygulama yazmak” olarak algılanabilir. Bu durum uygulama geliştiricinin, ASP.NET’in üretmekte olduğu HTML’in sunumunu yapmakta olan IIS ile browser arasında, sürekli veri gidiş-gelişlerini düşünmesini gerektirir. Gerçekte her bir Page objesi, Init event’i ve PreRender event’leri arasında oluşturulur, HTML çıktısı hazırlanır, ve bu çıktı browser’a gönderildiği anda dispose edilir. Dolayısıyla hiçbir zaman, bir önceki durumunu kendi başına hatırlayabilen bir Page objesinden söz edilemez. Programcı, Page objesine bu gidiş-gelişlerden herhangi biri sırasında, eski durumunu hatırlaması konusunda yardımcı olabilmek için ViewState ya da benzeri ortak bir depoya başvurmak zorundadır.

Getirileri ve Götürüleri

Performans

ViewState’in kullanımı default olarak etkin durumdadır. Kullanımı sırasında, Session ve Application objelerinin kullandığı sunucu kaynağından daha az kaynak tüketir. Çünkü sunucu, veri tutma işini browsera verdiği ve her seferinde geri aldığı ViewState datasını, sadece Init sırasında deserialize etmek, ve PreRender sırasında, istemciye HTML göndermeden hemen önce serialize etmek dışında bir kaynak kullanmadığı için daha az hafıza harcayacaktır. Herhangi bir session sırasında bazen yüzlerce kere Page oluşturulmakta, ve dispose edilerek hafızadan atılmaktadır. ViewState de Page’in bir parçasıdır.

Hafıza kullanımının azalmasına rağmen ağ performansı konusunda pek iyimser olmak mümkün değildir: ViewState her bir PostBack işlemi sırasında ağ üzerinden istemciye gönderilmek ve geri alınmak zorundadır. Sayfalara bölünmüş, büyük miktarda veri içeren datagridlerin kullanımı örnek olarak gösterilirse, ViewState’in kilobyte’larca yer tutarak ve sayfayla birlikte taşınarak ağ üzerindeki performansı önemli ölçüde azaltabildiği gözlenebilir.

Güvenlik

ViewState browser’a gönderilen bir string’den oluşmakta olduğundan ve sadece Base64 olarak çevrimi yapıldığından, içeriğinin bir programcı tarafından çalınması mümkündür. Ancak sanılanın aksine, browser’dan sunucuya gönderilecek viewstate verisinin değiştirilmesi ile sunucunun kandırılması pek mümkün değildir. Bunun nedeni, yine sayfa üzerinde tanımlı özelliklerden enableViewStateMAC’ın default olarak “True” olmasıdır. (Pek çok kaynakta bu default değer “False” olarak belirtilse de gerçekte “True” değeri almaktadır.)

Browser’dan sunucuya gönderilmekte olan viewstate verisi, sadece temel güvenlik kriterleri izlendiğinde (Kredi kartı vb. gibi bilgilerin ViewState verisinin içine yerleştirilmemesi) doğal olarak bir güvenlik açığı yaratmayacaktır.

ViewState’in Kullanımı

ViewState’in ağ performansına yönelik negatif etkileri nedeniyle kullanımı konusunda belli kriterler ya da alternatifler getirmek yerinde olur:

  • Sabit sayfalarda enableViewState özelliği değerini “False”’a çevirmek.
  • Sayfa üzerinde state’in hatırlanması işlemini ViewState yerine, Session ya da Application objeleri ile taşınacak verilerle belirlemek.
  • Tüm sayfanın enableViewState’ini iptal etmektense, belli kontrollerin ViewState kullanmasını engellemek.

Kullanıma Yönelik Alternatifler

ViewState’in network performansı üzerindeki negatif etkisini azaltmak amacıyla bazı alternatif kullanım şekilleri geliştirilebilir. Bu yolda atılması gerekli en önemli adım, Page nesnesi tarafından ViewState’in nasıl kullanıldığının anlaşılmasıdır.

Sunucuda Saklamak

Page class’ı üzerinde ViewState’in alınması için yazılmış ve Page’den türettiğimiz her bir sayfamız tarafından ViewState verilerinin serialize-deserialize edilerek kullanılmasını sağlayan iki adet virtual metot bulunmaktadır:

protected virtual object LoadPageStateFromPersistenceMedium()

ve

protected virtual void SavePageStateToPersistenceMedium(object viewState)

Bu metotlar, LosFormatter adlı, sadece sayfa üzerindeki ViewState nesnesinin (StateBag class’ı) serialize ve deserialize edilmesi için geliştirilmiş bir metot kullanmaktadırlar. LosFormatter’ın kullanımı konusunda bir ipucu yakalamak için, LoadPageStateFromPersistenceMedium metodu içinde olması muhtemel default kodlara şöyle bir göz atalım:

string strViewState = Request.Form["__VIEWSTATE"];
LosFormatter lf = new LosFormatter();
object viewState = lf.Deserialize(strViewState);

Page class’ından türetilmiş sayfamız üzerinde LoadPageStateFromPersistenceMedium ve

SavePageStateToPersistenceMedium metotlarının override edilmesi ve bu metotlar içinde

 

LosFormatter class’ının Deserialize ve Serialize metotlarının kullanılmasıyla sunucu, ViewState verilerini hiçbir şekilde istemciye göndermeden state bilgisini saklayabilir. Bu şekilde hem performans, hem de güvenlik konusunda önemli artı değerler kazanılabilir.

Aşağıda, bu konuda önerilebilecek üç ayrı alternatif hakkında bilgiler bulabilirsiniz:

Sunucunun Diski Üzerinde Saklamak

Sunucuda ya da Web Farm üzerindeki herhangi bir ağ paylaşımında, örneğin “SessionID.SayfaURL.viewState” adlı bir dosya tutulabilir. Aynı session ID’sine sahip tüm dosyalar, session sona erdiğinde silinebilir. Aşağıda bununla ilgili bir örnek bulabilirsiniz:

Örnek, web uygulamasının bulunduğu klasörde “NT AUTHORITY\NETWORK SERVICE” hesabının yazma hakkı bulunan “ViewStateData” adlı bir klasörün bulunduğu kabul edilerek hazırlanmıştır.

Öncelikle ViewState’i saklayacak ve okuyacak her iki virtual metodu da override edelim. Bu iki override işlemi de ViewState’in diskte saklanmasını istediğimiz Page class’ı içinde yapılacaktır:

     protected override void SavePageStateToPersistenceMedium(object viewState)
     {
          LosFormatter lf = new LosFormatter();
          StreamWriter sw = new StreamWriter(Server.MapPath("ViewStateData\\" + GetViewStateFileName()));
          lf.Serialize(sw, viewState);
       sw.Close();
     }

     protected override object LoadPageStateFromPersistenceMedium()
     {
            LosFormatter lf = new LosFormatter();
            StreamReader sr = new StreamReader(Server.MapPath("ViewStateData\\" + GetViewStateFileName()));
            string strViewState = sr.ReadToEnd();
            sr.Close();

            return lf.Deserialize(strViewState);
     }

     private string GetViewStateFileName()
     {
            string sessionID = Session.SessionID;
            string pageURL = Request.Url.Segments[Request.Url.Segments.Length - 1];
            return sessionID + "." + pageURL + ".viewState";
     }

SavePageStateToPersistenceMedium metodu, LosFormatter ve StreamWriter kullanarak, ve en altta belirlediğimiz GetViewStateFileName metodundan aldığı string’e dayanarak dosya yoksa oluşturacak, varsa da üzerine yazarak, içeriğinde ViewState verilerinin string olarak kalmasını sağlayacaktır.

LoadPageStateFromPersistenceMedium metodu ise ViewState’i string olarak alıp, yine LosFormatter aracılığıyla StateBag objesine dönüştürecektir.

Son olarak, Session bittiğinde gereksiz dosyaları silme işlemi de Global class’ı içinde aşağıdaki handler aracılığıyla yapılabilir:

     protected void Session_End(Object sender, EventArgs e)
     {
            string sessionID = Session.SessionID;
            System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(Server.MapPath("ViewStateData"));         
              System.IO.FileInfo[] files = dir.GetFiles(sessionID + ".*");

            foreach (System.IO.FileInfo file in files)
            {
                 file.Delete();
            }
     }

SQL Server ya da Benzeri Bir Data Kaynağı Kullanmak

ViewState’in SQL sunucusunda bir tabloda saklayarak connected senaryo ile almak da performansı arttıracak başka bir yöntem olarak düşünülebilir.

Öncelikle SessionID, PageURL ve ViewState sütunlarından oluşan bir tablo belirlenmeli ve SavePageStateToPersistenceMedium metonunun bu tabloya yazarak ViewState’i saklaması, LoadPageStateFromPersistenceMedium metodunun da bu tabloda tarama yaparak ViewState verisini alması sağlanmalıdır:

protected override void SavePageStateToPersistenceMedium(object viewState)
{

      SqlConnection cn = new SqlConnection("data source=localhost;database=ViewStateDemo;trusted_connection=true");
       LosFormatter lf = new LosFormatter();

       StringWriter sw = new StringWriter();
       lf.Serialize(sw, viewState);
       System.Text.StringBuilder sb = sw.GetStringBuilder();
       string strViewState = sb.ToString();
       string strSessionID = Session.SessionID;
       string strPageURL = Request.Url.Segments[Request.Url.Segments.Length - 1];

       if (SatirVarMi())
       {
            SqlCommand cmd = new SqlCommand("update ViewStateData set ViewState = @ViewState where SessionID = @SessionID and                PageURL = @PageURL", cn);
            cmd.Parameters.Add("@ViewState", strViewState);
            cmd.Parameters.Add("@SessionID", strSessionID);
            cmd.Parameters.Add("@PageURL", strPageURL);

            try
            {
                 cn.Open();
                 cmd.ExecuteNonQuery();
            }

            catch (SqlException exp)
            {
                 throw exp;
            }

            finally
            {
                 cn.Close();
            }
       }

       else
       {
            SqlCommand cmd = new SqlCommand("insert ViewStateData (SessionID, PageURL, ViewState) values (@SessionID,                @PageURL, @ViewState)", cn);
            cmd.Parameters.Add("@ViewState", strViewState);
            cmd.Parameters.Add("@SessionID", strSessionID);
            cmd.Parameters.Add("@PageURL", strPageURL);

            try
            {
                 cn.Open();
                 cmd.ExecuteNonQuery();
            }

            catch (SqlException exp)
            {
                 throw exp;
            }

            finally
            {
                 cn.Close();
            }
       }
     }

protected override object LoadPageStateFromPersistenceMedium()
{
       SqlConnection cn = new SqlConnection("data source=localhost;database=ViewStateDemo;trusted_connection=true");
       SqlCommand cmd = new SqlCommand("select ViewState from ViewStateData where SessionID = @SessionID and PageURL =           @PageURL", cn);
       cmd.Parameters.Add("@SessionID", Session.SessionID);
       cmd.Parameters.Add("@PageURL", Request.Url.Segments[Request.Url.Segments.Length - 1]);
       string strViewState;

       try
       {
            cn.Open();
            strViewState = (string) cmd.ExecuteScalar();
       }

       catch (SqlException exp)
       {
            throw exp;
       }

       finally
       {
            cn.Close();
       }

       LosFormatter lf = new LosFormatter();
       return lf.Deserialize(strViewState);
     } 

     private bool SatirVarMi()
     {
       SqlConnection cn = new SqlConnection("data source=localhost;database=ViewStateDemo;trusted_connection=true");
       SqlCommand cmd = new SqlCommand("select count(*) from ViewStateData where SessionID = @SessionID and PageURL =      @PageURL", cn);
       cmd.Parameters.Add("@SessionID", Session.SessionID);
       cmd.Parameters.Add("@PageURL", Request.Url.Segments[Request.Url.Segments.Length - 1]);
       int rowCount;

       try
       {
            cn.Open();
            rowCount = (int) cmd.ExecuteScalar();
       }

       catch (SqlException exp)
       {
            throw exp;
       }

       finally
       {
            cn.Close();
       }

       if (rowCount == 1)
            return true;
       else
            return false;
     }

Son olarak düşünülmesi gereken, Session bittiğinde SQL’den gereksiz satırların silinmesidir. Bu işi de Global class’ı içinde aşağıdaki gibi halletmek mümkündür:

protected void Session_End(Object sender, EventArgs e)
{
     SqlConnection cn = new SqlConnection("data source=localhost;database=ViewStateDemo;trusted_connection=true");
       SqlCommand cmd = new SqlCommand("delete ViewStateData where SessionID = @SessionID", cn);
       cmd.Parameters.Add("@SessionID", Session.SessionID);

       try
       {
            cn.Open();
            cmd.ExecuteNonQuery();
       }

       catch (SqlException exp)
       {
            throw exp;
       }

       finally
       {
            cn.Close();
       }

DataSet ve Session Objeleri Üzerinde Saklamak

Son olarak farklı bir alternatif, ViewState’in Session objesi üzerinde bir dataset’te tutulması düşünülebilir. Aşağıda bu alternatifle ilgili örnek kodlar bulabilirsiniz:

Öncelikle DSViewState adında bir typed-dataset oluşturalım:

Bu DataSet’in, oluşan her bir yeni session’da bir instance olarak saklanması ve içindeki tabloya viewstate verilerinin DataRow’lar halinde eklenmesi ya da değiştirilmesi ile viewstate yine sunucu tarafında ram’de saklanabilecektir.

Global class’ı içinde aşağıdaki gibi bir Session değişkeni içinde dataset oluşturularak tüm session içinde bu değer kullanılabilir:

protected void Session_Start(Object sender, EventArgs e)
{
      DSViewState ds = new DSViewState();
       Session["dsViewState"] = ds;
}

ViewState’in dataset’te saklanması istenen Page class’ı içinde de aşağıdaki override işlemleri yapılarak da bu alternatif kullanılabilir.

protected override void SavePageStateToPersistenceMedium(object viewState)
{
     LosFormatter lf = new LosFormatter();
     StringWriter sw = new StringWriter();
     lf.Serialize(sw, viewState);
     System.Text.StringBuilder sb = sw.GetStringBuilder();
     string strViewState = sb.ToString();
     string strPageURL = Request.Url.Segments[Request.Url.Segments.Length - 1];
     DSViewState ds = (DSViewState) Session["dsViewState"];

     if (ds.ViewStateData.Rows.Contains(strPageURL))
     {
          DataRow row = ds.ViewStateData.Rows.Find(strPageURL);
          row["ViewState"] = strViewState;
     }
     else
     {
          DataRow row = ds.ViewStateData.NewRow();
          row["PageURL"] = strPageURL;
          row["ViewState"] = strViewState;
          ds.ViewStateData.Rows.Add(row);
     }
}

protected override object LoadPageStateFromPersistenceMedium()
{
     DSViewState ds = (DSViewState) Session["dsViewState"];
     string strPageURL = Request.Url.Segments[Request.Url.Segments.Length - 1];
     DataRow row = ds.ViewStateData.Rows.Find(strPageURL);
     string strViewState = (string) row["ViewState"];
     LosFormatter lf = new LosFormatter();
     return lf.Deserialize(strViewState); 
}

Sonuç olarak, örneklemeye çalıştığım bu üç alternatifle, ViewState ağ performansı negatif olarak etkilenmeden kullanılabilecek, daha hızlı çalışan ve ViewState’ten dilediğince yararlanan web uygulamaları geliştirmek mümkün olabilecektir.

Bu makaleyi beğendin mi? Yorumunu Yaz!







Sizden Gelen Yorumlar:

Yorum Yazın

Tolga(30.06.2013 13:26:34)
ViewState.lerle uğraşmak bazen problem olabiliyor.Bununla uğraşmaktan sıkılanlar için en iyisi biran önce ASP.NET MVC . e geçiş yapmak .
%75 %25 %0
Katılıyorum Çekimserim Katılmıyorum



Hüseyin Yıldırım(31.10.2012 15:24:19)
Session alanı oluşturup sessionu düşenleri sildirmek sorunu çözer diye düşünüyorum.
%0 %0 %0
Katılıyorum Çekimserim Katılmıyorum



Ozan GÖKGÖZ(14.07.2011 13:02:09)
Hocam makale güzelde kullanıcı tarayıcı şak diye kapattı.. Bunun gibi bir günde 100 kişi yapsa 100 dosya....
%100 %0 %0
Katılıyorum Çekimserim Katılmıyorum






Copyright© 2001-2017. Bilgisayar Mühendisleri Portalı | Bütün hakları saklıdır.