måndag 05 oktober 2009 | Kategorier: .NET, Microsoft, Webbutveckling | Inga kommentarer
Jag har precis läst klart boken Pro ASP.NET MVC av Steven Sanderson. Resultat: jag är gravt peppad att sätta igång med ASP.NET MVC! Jag gillade verkligen den här boken; Sanderson skriver strukturerat och koncist, med en blandning av djupdykningar i tekniken och konkreta kodexempel. Ett klart plus är också att han inte är associerad med Microsoft – flera gånger understryker han att hans exempel inte handlar om ”demoware” utformade att få ramverket att glänsa utan skulle kunna fungera i en verklig situation. Boken går igenom många aspekter av webbutveckling med snygg mjukvarudesign som röd tråd och jag upplevde att den förklarar principerna bakom MVC-mönstret på ett mycket grundligare sätt (och lämnar färre frågetecken) än exempelvis Professional ASP.NET MVC 1.0 (av bland andra Scott Guthrie) som jag läst tidigare.
Om du är det minsta nyfiken på ASP.NET MVC så tycker jag absolut att du ska låna eller köpa den här boken. När jag skaffade den kostade den knappt 300 kr och det var den utan tvekan värd.
söndag 05 juli 2009 | Kategorier: .NET, Allmänt, Bloggar | 21 kommentarer
Lunarspindeln är ett litet Windowsprogram som låter dig spara ner dina (eller andras) publika blogginlägg (i RSS- eller textformat) och galleribilder från Lunarstorm, vilket kan vara smidigt om du vill ta en säkerhetskopia eller flytta dina blogginlägg till ett annat bloggverktyg (exempelvis WordPress). Lunarspindeln är helt gratis att installera och använda. Programmet är tills vidare i betaversion, så man får ha överseende med eventuella fel och brister.
Läs vidare »
onsdag 27 maj 2009 | Kategorier: .NET, Javascript, Webbutveckling | Inga kommentarer
Har du problem med mystiska dubbletter av cookies du skapat på en sajt dyker upp när du förväntar dig att de ska vara unika? Då kanske du gjort samma misstag som jag gjorde – missat att ställa in en path för varje cookie. Detta gäller oavsett om du använder dig av Javascript eller .NET-ramverkets WebBrowser-kontroll för att skapa cookies. Fixen är lyckligtvis mycket simpel.
Läs vidare »
söndag 24 maj 2009 | Kategorier: .NET, Bloggar, Teknik | Inga kommentarer
För några dagar sedan fick jag en förfrågan från en person som ville använda mitt snabbhack LunarBlogGrabber för att ladda ner, vad jag förstår, tusentals inlägg från sin blogg på Lunarstorm. Tydligen var inte mitt program riktigt vattentätt nog för den typen av jobb – jag har själv bara testat det med ett knappt hundratal inlägg, och det tog ändå en liten stund. Med tanke på hur hastigt hopknackat programmet är och att det faktiskt har varit en hel del intresserade användare (där de flesta verkar ha lyckats med sina nedladdningar) blev jag sugen att skriva ihop en uppdaterad version. Det är i sig inte några tekniska problem, men det dök ändå upp en del frågor längs vägen.
Läs vidare »
måndag 23 februari 2009 | Kategorier: .NET, Microsoft, Teknik | Inga kommentarer
Jag har under de senaste åren vid ett flertal tillfällen stött på WebBrowser-kontrollen, som är en .NET wrapper-klass till en underliggande ActiveX-kontroll motsvarande en Internet Explorer-instans. Kontrollen gör det enkelt att lägga in ett webbläsarfönster i sina .NET-baserade Windowsprogram, och även om den är lite bänglig att jobba med så har den definitivt sina tillämpningsområden.
Nu senast var det hos en kund som jag satt och fipplade med WebBrowser. Jag ville att popup-fönster skulle öppnas i en ny WebBrowser-kontroll istället för i ett vanligt Internet Explorer-fönster (vilket är standardbeteendet), och det gick att åstadkomma med lite pill. När användaren öppnat en popup och sedan stängde den så slängdes WebBrowser-instansen bort, med allt vad det innebär av Dispose():ande. Det jag insåg ganska snabbt var att det minne som allokerades vid skapandet av popup-webbläsaren inte frigjordes när den stängdes. En minnesläcka alltså. Detta var något som sett i tidigare projekt, men då handlade det mest om det minne som kontrollen läcker varje gång en ny sida laddas, vilket sker i ett mycket långsammare tempo. Jag hade aldrig tidigare kommit på varför minnesläckorna uppstått eller hur jag skulle komma till rätta med dem. Det har heller inte varit något affärskritiskt i de tidigare fallen, men för den här aktuella kunden var det just det.
Efter lite Googlande kunde jag konstatera att minnesläckorna i WebBrowser-kontrollen är kända av Microsoft, och att det även finns ”hotfixes” för dem (som jag tror ska vara inkluderade i diverse service packs för olika versioner av Windows). Jag provade att installera en sådan hotfix och kunde inte se någon skillnad överhuvudtaget.
Några timmar senare hittade jag däremot ett mycket intressant API-anrop som jag faktiskt tror löser min kunds problem, nämligen SetProcessWorkingSetSize i assemblyn kernel32.dll. Metoden används för att ställa in övre och undre gränser för det reserverade arbetsminnet för en given process, men om man anropar den med -1 som parametrar för gränserna så frigörs så mycket arbetsminne som möjligt. Så här kan det se ut i ett program skrivet med C#:
// Importera metoder från kernel32.dll, någonstans i klassdefinitionen...
[DllImport("KERNEL32.DLL", EntryPoint = "SetProcessWorkingSetSize", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
internal static extern bool SetProcessWorkingSetSize(IntPtr pProcess, int dwMinimumWorkingSetSize, int dwMaximumWorkingSetSize);
[DllImport("KERNEL32.DLL", EntryPoint = "GetCurrentProcess", SetLastError = true, CallingConvention = CallingConvention.StdCall)]
internal static extern IntPtr GetCurrentProcess();
// ...och frigör arbetsminne där det passar.
IntPtr pHandle = GetCurrentProcess();
SetProcessWorkingSetSize(pHandle, -1, -1);
Så var det med den saken. Den ursprungliga forumtråden där jag läste om detta hittar du här, och Microsofts dokumentation av de aktuella metoderna i kernel32.dll finns här. Hoppas det hjälper någon.