BLOGas.lt
Sukurk savo BLOGą Kitas atsitiktinis BLOGas

Aš - Vilniaus dienoje

Parašė Sergejus | 2008-05-31 19:05

Paskutiniu metu dėl vis artėjančios stažuotės atsiranda tai viena, tai kita naujiena. Vakar darbe aš išėjau “ilgų atostogų”, o šiandien mano veidas Vilniaus dienoje… Šaunu!

Rodyk draugams

Microsoft Student Partners

Parašė Sergejus | 2008-05-29 20:34


Šiandien man buvo suteiktas Lietuvoje dar nelabai žinomas Microsoft Student Partners (MSP) statusas. Kaip ir seka iš pavadinimo, MSP yra suteikiamas aukštųjų mokyklų studentams, besidominantiems ir besidalinantiems informacija apie Microsoft produktus su kitais studentais tiek universiteto viduje, tiek įvairių susitikimų metu.


Pirmasis mano žingsnis MSP rolėje bus dalyvavimas Baltijos šalių Microsoft studentų partnerių susitikime, kuris vyks birželio 13 dieną, Taline. Jo metu aš trumpai pristatysiu Lietuvos .NET vartotojų grupę bei pasidalinsiu įspūdžiais apie būsimą stažuotę Microsoft, Redmonde. Tai bus pirmasis mano viešas pristatymas anglų kalba, tikiuosi susitvarkysiu…

Rodyk draugams

SQL užklausų greitaveikos stebėjimas

Parašė Sergejus | 2008-05-26 20:30

Tikriausiai daugeliui laikas nuo laiko tenka optimizuoti SQL užklausas. Kaip žinia, pagrindinis optimizacijos tikslas - sumažinti užklausų vykdymo laiką. O kaip išmatuoti tą vykdymo laiką? Žemiau pateiksiu keletą paprastų patarimų, kuriuos naudoju kasdieniniame darbe.



  1. Prieš užklausų vykdymą išvalyti buferį ir procedūrų tarpinę atmintį (cache):

  2. Jeigu norima sužinoti kiekvienos užklausos vykdymo laiką, galima įjungti laiko statistiką:

  3. Jeigu norima sužinoti bendrą vykdymo laiką, užtenka pasirašyti tokį kodo fragmentą:

O gal jus dar žinote kokių patarimų?  Rašykite!

Rodyk draugams

Teisingas LINQ to SQL Lazy Load galimybės panaudojimas

Parašė Sergejus | 2008-05-24 16:12

Kaip žinia, LINQ to SQL pasižymi galimybe krauti duomenis ne iš karto po LINQ užklausos apibrėžimo, o tik bandant iteruoti per jos rezultatus (dar galimybė žinoma kaip Lazy Load). Tai labai patogu, nes įgalina komponuoti užklausas jų nevykdant. Iš kitos pusės, dažna pradedančiųjų LINQ to SQL programuotojų klaida, kad jie pilnai nesupranta duomenų pakrovimo pagal poreikį veikimo principo, kas rezultate gali sukelti greitaveikos problemų.




Pavyzdyje aš naudosiu Product ir Category esybes iš Northwind duomenų bazės:



Tarkime, mes norime gauti visus produktus priklausančius kategorijai „Desertai“, juos atspausdinti, o vėliau pakeisti užsakyto kiekio ir kiekio, esančio sandėlyje, reikšmes. Dar viena prielaida – produktų spausdinimas ir kiekio pakeitimas negali vykti viename foreach cikle. Aukščiau išvardintus reikalavimus galime realizuoti tokiu būdu:



Iš pirmo žvilgsnio viskas yra gerai, bet pasižiūrėkime į SQL Server Profiler:



Atkreipkite dėmesį į tai, kad kiekvienam foreach ciklui buvo vykdomas SELECT sakinys. Tai atsitinka dėl minėtos duomenų pakrovimo pagal poreikį galimybės. Kai mes turime LINQ to SQL užklausą, duomenis bus imami tik bandant per juos iteruoti (mūsų atveju foreach ciklas).


Norint to išvengti, LINQ to SQL užklausą reikia materializuoti, o vienas iš būdų tai padaryti – iškviesti metodą ToList():



Rezultate mes gausime vieno SELECT sakinio iškvietimą:



Iš viso pasakyto peršasi tik viena paprasta išvada: naudoti LINQ to SQL gerai, o gerai naudoti LINQ to SQL dar geriau.


P.S.


Kaip tikriausiai pastebėjote, praeitą savaitę visai nebuvo naujų straipsnių. Tai susiję tiek su noru pailsėti po .NET vartotojų grupės organizacinių darbų, tiek su darbų perdavimų (nuo birželio 1 aš išeinu „ilgų“ atostogų, o nuo liepos 1 aš jau Redmonde). Tikiuosi dar savaitė ir aš grįšiu į savo ritmą.

Rodyk draugams

Antrojo Lietuvos .NET vartotojų grupės susitikimo skaidrės

Parašė Sergejus | 2008-05-18 15:29

Antrojo Lietuvos .NET vartotojų grupės susitikimo skaidrės (PPT, PPTX ir PDF formatais) bei išeities tekstai jau prieinami!

Rodyk draugams

Visual Studio 2008 SP1 Beta 1

Parašė Sergejus | 2008-05-12 20:32

Šiandien viešai tapo prieinama pirmoji Visual Studio 2008 pataisymų paketo beta versija. Iš tiesų tai daugiau nei pataisymų paketas, nes dabar .NET Framework 3.5 apims Entity Framework, ADO.NET Data Services, ASP.NET Dynamic Data ir ASP.NET Routing Engine.


Rodyk draugams

Argumentų validavimo biblioteka

Parašė Sergejus | 2008-05-11 15:56

Įkvėptas Fredrik Normén straipsniu „Kaip validuoti metodų argumentus“, aš pasirašiau validavimo bibliotekos prototipą. Būtent prototipą, t.y. šis sprendimas dar turi būti tobulinimas, bet tai tiesiog mano koncepcijos pasitikrinimas.


Pagrindinė mano užduotis buvo sukurti į LINQ panašią validavimo sintaksę. Tam aš pasirinkau Fluent Interface projektavimo šabloną ir naują C# 3.0 praplėtimo metodų galimybę. Jų pagalba validavimas gali būti užrašomas tokiu būdu:



Praplėtimo metodų dėka galima plėsti validavimo metodų aibę be jokios įtakos egzistuojančiam kodui. Dar vienas svarbus aspektas buvo užtikrinti, kad tik su validuojamu tipu suderinami praplėtimo metodai buvo prieinami iš IntelliSense. Tam į pagalba atėjo bendrybės.


Taigi pradėsiu nuo architektūros. Kaip matyti, validavimas prasideda nuo metodo Is() iškvietimo. Tai praplėtimo metodas atsakingas už validavimo objekto sukūrimą. Fluent Interface projektavimo šablono esmė – priimti kaip argumentą ir grąžinti to paties tipo objektą, tam kad metodai galėtų būti jungiami. Tipinis tokio projektavimo šablono pavyzdys:


Kadangi kiekvienas iš išvardintų String metodų grąžina String tipo objektą, šiuos metodus galima jungti. Jeigu kiekvienas iš validavimo metodų turi grąžinti validavimo objektą, kaip jų rezultatą galima tiesiogiai panaudoti if sąlygoje? Atsakymas slypi C# išraiškoje implicit operator bool, kurios dėka galima neišreikštinai konvertuoti  validavimo objektą į boolean tipą.



Norėčiau atkreipti dėmesį į IsValid savybės priskirimą. Kadangi validavimo objektui bus kviečiami keli metodai iš eilės, tai IsValid turi saugoti sumarinę reikšmę. Jeigu bent vienas validavimo metodas grąžins false, IsValid savybė irgi grąžins false.


Pagal Fluent Interface projektavimo šabloną turi būti metodas, kuris apgaubs validuojamą objektą, grąžins validavimo objektą kuris vėliau ir bus naudojamas su skirtingais validavimo metodais. Tokį metodą aš aprašiau kaip praplėtimo metodą Is:



Prototipui aš aprašiau keletą pagrindinių validavimo metodų:



Šiuo metu aš svarstau galimybę pridėti validavimo pranešimų valdymą. Būtų šaunu jeigu ir jus išsakytumėte savo pasiūlymus bei mintis apie tokią validavimo biblioteką. Labai laukių komentarų!


P.S.
Pateiktą kodą galite parsisiųsti.

Rodyk draugams

Programavimo žinios pravers visur!

Parašė Sergejus | 2008-05-08 22:38

Rodyk draugams

Reporting Services - “Unable to read file” pranešimas

Parašė Sergejus | 2008-05-06 21:04

Šiandien teko spręsti suktą problemą: bandant atidaryti Reporting Services 2005 sugeneruotą Excel failą, buvo rodomas pranešimas „Unable to read file“. Kas blogiau, internete nepavyko rasti nei aiškią problemos priežastį, nei sprendimą. Po tam tikrų bandymų pavyko surasti, kad ši problema atsiranda esant įjungtam HTTP suspaudimui (angl. HTTP Compression) Internet Information Services serveryje. Sprendimas paprastas – atjungti HTTP suspaudimą…

Rodyk draugams

Įvado į Silverlight 2.0 išeities tekstai

Parašė Sergejus | 2008-05-05 17:48

Mūsų kurtos Silverlight 2.0 aplikacijos išeities tekstai jau prieinami.

Rodyk draugams