Kategoriler


SON YORUMLAR
spiderman
tatar ramazan ODTÜ ve Sakarya mezunları süper ama İTÜ mezunlarını kapıdan içeri almıyorlar diyorsun ben de tam tersini biliyorum İTÜ mezunları mezun olmadan iş buluyor havada kapıyorlar OdTÜ ve sakarya mezunları iş arıyorlar sektörü bilmesek ?
Ömer karikutal
Php,mvc asp.net, c # ödevleriniz uygun fiyata yapılır. karikutalomer@gmail.com
Ercan Sezdi
Donanimsal ödevlerinizi de yapabilirim. Raspberry pi, Ardiuno, Msp430 donanimsal programlama yapabilirim. Programlama dilleri C++, Python, Assembly olabilir. Zorluk derecesine gore mobil uygulama da yazabilirim. Iletisim: ercansezdi007@gmail.com
Ercan Sezdi
Elektrik elektronik mühendisliği okuyorum. Pyhon ve C++ ödevleri yapabilirim. Iletisim: ercansezdi007@gmail.com
Senior Dotnet Developer
Merhaba arkadaslar, Yazilan yorumlari bikmadan usanmadan okudum. Ssagdan soldan duyacaklariniz yerine gercek hayat hikayesinden baslayayim. Elk elktrnk muhendisi olarak 7 yilda 2.2 ortalama Uldag unv den mezun oldum. Sene 2010. Askere gidip geldim.1 sene de bos bos kahvede okey oynayarak gecirdim :)) is aradimmi? Hayir. Nasilsa yillarca calisacagiz diyerek keyfime daha cok zaman ayirdim. Hafif bir giristen sonra hizli bir giris olsun. Aldigim maaslari yazayim heyecanli olsun:) 1. Firma :1250- 6 ay (asgari ucret:900) 2. Firma : 2500-10 ay 3. Firma : 3000-1 yil 4. Firma : 4000-10 ay 5. Firma : 6000- 18 ay 6.Firma : 9000+ istanbul ?? henuz baslamadim :) Bu kadar detayi verdim ki biraz motive olun. 7 yilda farkli muhendislikten gelen biri buraya gelebilirse calisan herkes icin bu sans var. Bu firmalardan son 3 tanesi hergun duydugunuz yerler. 2 kez de 2 farkli yerde terfi aldim. Herkesin girmeye can attigi iyi maas veren yerler. Cok da gozunuzde buyutmeyin. He soylemeyi unuttum java diil .net developer olarak calisiyorum. Bu maaslar ile cok javaciyi geciyorum. Piyasayi baya iyi tanidim.Maas skalalarini vs. Size tavsiyem her duydugunuza inanmayin. Yok pahasina calismayin, fazla da ucmayin hersey dozunda guzel. Kisacik bir detay daha. 2012 de istanbula ilk geldigimde 3 haftada 21 yer ile gorusmustum. Gecen ay 2 haftada 20 yer ile gorustum. Piyasa 2012 den beri acik. Torpilsiz sadece calisarak buralara geldim.Ise giremiosaniz cv nize bakan yoksa oturup dusunmekte fayda var. Birsryleri eksik yapiorsunuz belki de. Not ::::::: Gecenin 2sinde tum bunlari yazdim ki birilerinr faydam olsun. Ne yazikki her kafadan bi ses cikiyor guzelim Turkiyemde. Bilenler atanlar tutanlar bol bol. 70 den fazla yer ile gorustum buyuk kucuk. 50 tanesinden olumsuz donus yada hic donus olmamistir. Sonucta buralara gelebildim. Gelecek bilisimde. Motivasyonunuz hic kirilmasin. Kalin saglicakla.
Memet
Katılım ödevim var yardıma ihtiyacım var yardımcı olabilecek var mı
Halil
Tatar Ramazan
Bizim Sakarya üniversitesinden iyi yerlere gelen bir sürü adam var. Hatta ödevleri yapmayan tembel bilinen biri katılım bankasına girdi şimdi de Avustralyada programcılık yapıyor. Kurumsal firmalarda her üniversiteden eleman vardır zaten. Mesela Ford Otosan. Çok da para vermez hepsi. Memur maaşına çalışırsın. General Elektrik gibi yerler yüksek maaş verebilir. Ama oralara girmek zordur. İşi de zordur. Ben 2010 yılında KPDS İngilizceden 89 almıştım. Süper bilişim uzmanıyım. İyi öğretim almak, Üniversitede bol proje yapmak kişiyi 1-0 öne geçirir. Veya ortalamada yüksek puanlı, öğretimi iyi olan üniversite mezunları daha başarılı olabilir. İtirazım yok. Ama istisnalar da her zaman mevcuttur. Kocaelinin birincisi elbette yıldızın sonuncusundan daha başarılı olacaktır.
No One
Tatar, sen neye atarlanıyorsun? Boş işler dediğin bütün hayatını etkileyecek kariyer planın ve senin bütün hayatın. Herkes her yere gelemez, kimse kimseyi kandırmasın, en öncelikle de kendini kandırmasın. Verdiğin örnekler istatistik orsnında yüzde kaç acaba? Mesela anadolu okulundan mezun kaç kişi iyi şirketlerde çalışıyor, büyük çoğunluk iş bulamıyor kendi tanıdıklarım var, ben üzerine diyorumki iyi okuldakiler de her yerde istediği gibi bulamıyor, sen burada montajcılık yaparken amerikalısı avrupalısı senin kullandığın teknolojileri üretiyor, senin yaptığın mühendislik mi montajcılık mı şimdi? Tr de en iyi şirketlerde çalışan farklı 10 üzeründe onlarca kişiye sor bakalım neyin dizaynını neyin teknolojisini üretmişler? Söylediğin bakan ingilterede yaşıyorsa sterlin olarak maaş alır 70bin tl diyerek manipule etme 6 ya böl, 11 bin sterlin de, tr de veriyorlarsa kim kime o kadar parayı veeiyor kaç tane bölüm birincisi o parayı alıyor saçmalama lütfen. Ben diyorumki birincil hedef herşeyini kariyere odaklama veya tamamen boşa salma, herkes bir şekilde yaşıyor hayatını zaten ancak neyi istiyorsa ona çabalasın ama bazı şeyler olmuyorsa da hayatını mutsuz geçirme. Sen mesela bırak dünya işlerini ahiretini yaşa diyorsun, milyonluk girişimcilik yapsan ve işlerin tıkırında gitseydi ve birçok hayalini gerçekleştirseydin şu anda beyler şunu şunu yapın hayat çok güzel diyecektin, şimdi gelmiş hayat boş diyorsun, komik. Benim yazdıklarımdan herkes ne demek istediğimi anlamıştır zaten, bazı şeyleri görmek için 40 yaşına gelmeye gerek yok, çok fazla araştırıp çok fazla kişiye sorarsan ve işin içinde bizzat bulunursan görüyorsun zaten ki yazdıklarım çok az şey olmasına rağmen anlaşışır özet bilgiler, seversin kullanırsın, sevmezsin saygı duyar ve okumazsın bu kadar basit.
ali
amk bilgisayar mühendsiliği nerden seçtim seni mis gibi kolay bölümler varken çekilir dert değil...... tavsiye etmiyorum kardeşim.
Tatar Ramazan
No One bırak boş işleri başlarım kariyerine de üniversitesine de! Dünyada bir halt olmadığını anlayın işte. Ahirete yatırım önemli. Herkes bir şekilde yükseliyor ilerde zaten. ODTÜ mezununun 26 yaşında geldiği noktaya Sakarya mezunu 33 yaşında geliyor. Ortalamada ne kadar çalıştıysan hayat sana o kadar verir. Mesele Karadeniz Teknik Maliye bitiren biri vardı. 29 yaşında vergi denetmeni oldu. Ankara Siyasal bitirseydi 22 yaşında işe girerdi. Eski bakan Mehmet Şimşek bölüm birincisi oldu. İngilterede 70 bin lira maaş alıyordu. Her şey ve herkes derece derece.
No One
Yeni mezun olarak birkaç küçük şey yazmak istiyorum, kariyer net veya linkedin deki iş ilanlarına bakarsanız, özellikle yeni mezun olanlar için bile min 2 yıl deneyim ve birçok programlama dilleri vs isterler. 5 kişi işe alınacaktır, 500 kişi başvurur. Her yere gereksiz sayıda birçok üniversite açıldı, avrupanın en kaliteli üniversiteleri ingiltere ve almanyada bile max 50 civarı, bizde ise 150-200 arasında bunun siyasi bazı sebepleri var. Mesela siz her il e üniversite açarsanız, tüm ailelerin çocukları üniversite mezunu olacaktır, çocuk ve aile pskolojikmen rahatlar. Esnaf ise öğrencilerden ciddi gelir elde edecektir. Sorun ise bizim gibi ülkelerde bilim veya teknoloji geri plandadır ve iş istihdamı azdır, mesela 100 kişi işe alınacaktır ancak açılan birçok üniversite ile 1000 kişi mezun olur ve kalan 900 kişi işe giremez, bu sayı her yıl daha da artar ve işsizlik artar, insanlar da artık üniversite mezunu olma fark yapmıyor master yapayım, part time çalışayım der, zaten birçoğu çok kalitesiz eğitim alır ve giriş maaşları 1500-3000 arasında olur yılları işsizlik veya düşük maaşla geçirir. Kişi de sorunu kendisinde sanır, halbuki tüm suç sistemin böyle olmasını sağlayanlar, anca siz yıllar sonra para ve zaman kaybınızı anlarsınız, veya anlasanız bile elinizden çok fazla birşey gelmez. Peki şirketler insanları neye göre seçer, kendini geliştir denilen tavsiye ne kadar doğru? Arz-talep dengesini iyi analiz etmelisiniz, mesela şu anda çok fazla mezun var, ekonomik kriz dolayısı ile iyi okuldan mezunlar bile zannettiğiniz gibi hemen iş bulamıyor. Ya top 5 okul dan 3+gpa ile mezun olacaksınız, ya da torpiliniz olacak. Ben top 5 okuldan mezunum ve okulun zorluğundan dolayı mezun olan herkesin onlarca projesi, jaca, c, c++, python, matlab gibi dilleri, birçok farklı ideleri, oop, mvc, design pstterns, ve çok farklı çeşitte algoritma çeşitleri görmelerine ve ingilizce seviyesinin çok iyi olmalarına rağmen (toefl a girenelerin çoğu 80-100 arası) ve alese girenlerin çoğu 80-95 arası aldığını düşünürseniz, yine de işe girerken sizi beğenmezler, benim gördüğüm kadarıyla şirketlerin insan seçerken yaptıkarı sıralama şu şekilde, 1- okul ismi (boun, koç, itü, odtü, bilkent top 5, ytü, sabancı, tobb, hacettepe vs gibi ikincil seviye okullar, diğerleri daha geri planda, her şirketin kendince filtreleme sistemi var ve bazı okul mezunlarını asla almazlar) 2- gpa ortalama (kurumsal veya büyük şirketler savunma, telekom, banka vs hepsi önem verir, master yapmak istiyorsanız birinci kriterdir, küçük teknokent şirketlerinden de soran çok oluyor ben ve arkadaşlarıma staj için bile) 3- ingilizce (iyi okulların çoğunun ingilizce seviyesi upper dır, ingilizceniz yoksa bilgisayarcı sayılmazsınız) 4- yaptığınız projeler, staj, part time, iş deneyimi (bazı şirketler ilanlarda iyi yerde staj yapmış olma koşulu koyar, iş yaptığınız sektörde staj yapmanızı beklerler vs, 2017 den beri birçok şirket kurumsal ve normal hemen hemen hepsinde artık staj yapmak bile zordur, ya gpa 3+ olacak, ya da torpiliniz, top5 okuldaki ben ve birçok arkadaşım staj bulmada zorlandı, top5 te değilseniz part time veya normal iş tecrübesi sizi direk öne atar, iyi okuldakilerin çoğu derslerinde projeler çok ve zordur, o yüzden diğer okuldakilerin aradaki açığı iş tecrübesi ve hobby projelerle kapatması lazım) 5-referans (okuldaki hocanız veya staj, iş yerindeki mühendisin işe girerken size olumlu referans olması, şu anda yeni mezunlardan 2-3 tane referans istiyor birçok şirket 6-diğerleri, aklıma gelmeyen diğer işler, sosyal sorumluluk, klüp, sertifika, yarışma vs bunlara önem veren ik cı veya şirketler olabiliyor cv nin kenarında durması işe yarayabilir 0- torpil, çevreden veya akraba aile tanıdık ile torpiliniz var ise diğer herşeyden etkili hale gelip herkesin önüne geçebilirsiniz, batıda iş liyakat veya işi en iyi yapana verilir. Doğu toplumlarında ise iş güvenilir kişi ile yapılır, o yüzden tanıdıkları işe alırlar, şirket gizliliği ve güvenliği bazı şirketler için çok sıkıntılı olabiliyor vs, bu kozu olan çok fazla insan var piyasada, o yüzden siz bunlardan birisi değilseniz yukarıdaki beş maddenin hepsini yükseltmeye bakın. İyi okul hiçbirşey mi, veya herşey mi? Top5 ten gpa 2.0 - 2.5 arasında mezun olursanız biraz zor günler sizi bekliyor, master yapamazsınız, paranız yoksa yurt dışına gidemezsiniz, çok ağır ders ve projeler yaptınız ama okulu zor bitirdiniz ve dışarıdaki şirketler size çok önem vermeyebilir, iş bulurken ve bulduktan sonra da min 1 yıl falan zorluk çekersiniz, ilk başlarda iyi kurumsaldan başlamak zordur İyi okul mezunu Gpa 2.5-3.0 arası, savunmaya girmek zorlar, onun dışında bazı kurumsallara ilk başta giremezsiniz ama bazılarına girebilirsiniz, master içinde şartlar biraz zorlar İyi okul mezunu 3gpa+ ile master veya iş bulmak daha kolaydır ancak okuldaki zorluklardan sonra hiçbir zaman tatmin olamayabilirsin, çünkü hayat üniversitede zor projelerle uğraşırken kurduğun hayaller gibi değilmiş onu işe girince öğreniyorsun Diğer okullardan mezunlar, okulda gezip tozduysanız çok güzel, en güzel yıllarınız o yıllardı, zor okuldakiler kadar çalışmadınız ve gençliğiniz full çalışmayla geçmediyse iş hayatı ilk birkaç yıl zorlar, sonrasında kurumsal şirketlerin bazılarında hatta çoğunda devam edebilirsiniz belki (2-3 yıl sonra girenler var oran olarak bilmiyorum, bazı şirketlere çok zor) Yaş 28-30 üstü ise, srtık iş bulmak yeni mezun kadar zordur, çünkü maaş beklentisi fazla ancak şirketler siz ne kadar kaiteli olursanız olun sizden daha ucuza çalışacak birisini bulabiliyor, maaş zamları veya artışı düşük, tl nin alım gücü her seferinde düşüyor, kaygılar çocuk varsa dahada fazla Yurt dışına mastera gitsenizde, phd yapsanızda yaş ilerliyor, 30 una yaklaştığında hala öğrenci gibi takılmak zorunda olmak, avrupada 2-3-4 bin euro ya yaşamak, hangi ara evleneceksin, ev veya araba alacaksın, geri.dönecek misin, hayatın boyunca atomu mu parçalayacaksın? Tr dekiler en azından atom parçalamıyor Sonuçta top5 okuldan yeni mezun, tr de yine top şirketlerin birinde ben ve çoğu arkadaşım 3.5-4.5k ya başladık, savunmadakiler 5k üstü, ancak tavsiye verecek olursam, tünelin ucu bmbk bir yere çıkıyor. Hayatınızı doya doya yaşayın, çok zengin olmadığınız sürece para o kadar önemli değil, ben daha 22-25 yaşındayım (tam yaşım belli olmasın diye) ve umutsuzum bazı şeyler için, hayatınızı ev veya araba almaya mı harcamak istiyorsunuz, büyük şehirde zar zor yaşamaya mı? Öğrenciyken anlamanız pek mümkün değil kapitalist sistemin içine girip para kazanmaya başlayınca, insanların nasıl davrandıklarını çok daha net anlıyorsunuz, okuyun, gezin, eğlenin, anı yaşayın. Ne çok çalışın, ne de çok tembellik edin, herşeyi dozunda yaşayın. Daha çoook şey yazardım da boşver
Tatar Ramazan
Adam ÖSS ilk 3000 e girdi İTÜ mezunu doğru dürüst bir yere giremedi. ilk işini 26 yaşında buldu. O da kıytırık bir firma. Ekmek arslanın kuyruğuna indi. Siz ne bekliyorsunuz? Firmalar kollarını açtılar sizi bekliyorlar. :) :) :)
yazilimci
Java, C/C++, python ve bilgisayar müh. derslerinizin ödevleri garantili yapılır, yazilimcialper@gmail.com

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 Hakkındaki 10 Büyük Yalan!
Bilgisayar Mühendisliği Hakkındaki 10 Büyük Yalan!
Bilgisayar Mühendisliği Hakkındaki 10 Büyük Yalan!
Türkiye'de Bilgisayar Mühendisliğinin Durumu? Bilg. Mühendisliğinin bugünü ve geleceği
Bilgisayar Mühendisliği Hakkındaki 10 Büyük Yalan!
Bilgisayar Mühendisliği Hakkındaki 10 Büyük Yalan!
Bilgisayar Mühendisliği Hakkındaki 10 Büyük Yalan!
Bilgisayar Mühendisliği Hakkındaki 10 Büyük Yalan!
Bilgisayar Mühendisliği Hakkındaki 10 Büyük Yalan!
Bilgisayar Mühendisliği Hakkındaki 10 Büyük Yalan!
Bilgisayar Mühendisliği Hakkındaki 10 Büyük Yalan!
Bilgisayar Mühendisliği Hakkındaki 10 Büyük Yalan!
Bilgisayar Mühendisliği Hakkındaki 10 Büyük Yalan!
Bilgisayar Mühendisliği Hakkındaki 10 Büyük Yalan!
Bilgisayar Mühendisliği Hakkındaki 10 Büyük Yalan!
Yazılım Projelerinin Bitme Oranları?
Flash CS4’ün Getirdiği Yenilikler
Bilgisayar Mühendisi olacaklara üniversite seçme rehberi?
ASP .NET - The TextBox Control

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.6.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.7.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-2018. Bilgisayar Mühendisleri Portalı | Bütün hakları saklıdır.