Tym wszystkim co chcą się dowiedzieć: jak obsługiwana jest pamięć na platformie .NET, jak działa Garbage Collector, co to są generacje zmiennych i z jakimi stosami mamy do czynienia w .NET, co to są obiekty tymczasowe, jak przechowywane są duże obiekty i dlaczego mamy do czynienia z fragmentacją pamięci, jak przebiega finalizacja (kiedy potrzebny jest destruktor, metoda Finalize lub wykorzystanie mechanizmu Dispose) jakie są częste problemy z pamięcią. Polecam obejrzenie filmu-prezentacji: http://www...
Strona głównaUżytkownik
Damian | użytkownik
Aby bez problemu programiści wykorzystujący Visual Studio 2008 SP1 mogli łączyć się z Team Foundation Server 2010, opublikowany został dodatek - Visual Studio Team System 2008 Service Pack 1 Forward Compatibility Update for Team Foundation Server 2010.
Po wyjściu finalnej wersji ASP .NET MVC 1.0 zabrałem się ostro do nauki nowej platformy. Już wcześniej oglądałem kilka webcastów z strony www.asp.net oraz śledziłem uważnie blog Scott Guthrie dotyczących MVC i raczej nie spodziewałem się niczego nowego. Właściwie jedyną rzeczą która od razu rzuciła mi się jednak w oczy po wyjściu wersji finalnej był brak plików codebehind dla widoków. Na początku nie potrafiłem zrozumieć dlaczego coś, co używałem od...
Wraz z pojawianiem się kolejnych wersji .NET do świata programistów wchodziło coraz większe zamieszanie. Co oznacza każdy następny numerek, jakie zmiany wnosi, jak się owe zmiany mają do poprzedników? Przykładowy fakt, że piszemy program używając Visual Studio 2008 w języku C# 3.0 i korzystając jednoczeście z bibliotek w wersjach 2.0, 3.0 i 3.5, a o jego poprawne działanie dba CLR w wersji 2.0.50727 może nieźle namieszać. Szczególnie u początkujących developerów.
Zdarza się, że mamy w projekcie grupę plików powiązanych ze sobą logicznie. Na przykład - jeden wygenerowany automatycznie i drugi uzupełniający go własnoręcznie napisanym kodem. Przykładem "z życia" są tu klasy form z .NET, gdzie to Visual Studio standardowo pokazuje swoją ciekawą funkcjonalność "zwijania" grupy powiązanych plików. Niestety, takie zachowanie nie jest dostępne w żaden znany mi sposób z poziomu interfejsu użytkownika. Jak więc wykorzystać ten trik we własnych programach?
Czasami zdarza się, że jesteśmy świadomi istnienia jakiejś funkcjonalności, jednak wredny twórca biblioteki bezwstydnie ją przed nami ukrył. A my ją odkryliśmy na przykład przy pomocy Reflectora.
W dobie tak potężnych narzędzi jak Visual Studio programiści często zdają się całkowicie na ich funkcjonalność. Jedną z (wspaniałych zresztą) cech współczesnych IDE jest Intellisense. Czy wyobraża ktoś sobie pisanie kodu bez podpowiedzi? Zobaczmy jednak, że nie zawsze można na tym elemencie polegać w 100% ze względu na "konfigurowalność" nawet tego mechanizmu VS.
Oto praktyczny przykład użycia wyrażeń lambda i metod rozszerzających, który lekko i prymitywnie "ociera się" o programowanie aspektowe i imituje jego podstawowe założenia:
Czy wiemy co to "abstract class"? WIEMY! A wiemy co to "sealed class"? WIEMY! Teoretycznie - dwa przeciwieństwa. Jedno zabrania tworzenia instancji klasy, drugie - zabrania dziedziczenia z klasy. Czy spotkał się ktoś kiedyś z klasą zadeklarowaną w ten sposób?
Właściwości (properties) to przyjemny mechanizm do zapewniania enkapsulacji, czyli jednej z najważniejszych cech programowania obiektowego. Przyjemniejszy niż zwykłe metody zwane "getters & setters". Zwrócę jednak uwagę na ciekawy fakt (zapewne znany większości czytelników, ale...). Popatrzmy na następujący kod:
Lambda expressions - brzmi groźnie. To właśnie tym elementem języka C# 3.0 straszono programistów (a raczej programiści straszyli się nawzajem) jeszcze dobre kilkanaście miesięcy przed premierą .NET 3.5. A bo to "funkcyjne", a bo to "nowe", "nieznane" i trudne do pojęcia. Jak za chwilę zobaczymy - nic bardziej mylnego. Jeżeli kiedykolwiek korzystałeś z delegatów, to umiesz korzystać także z metod anonimowych. Jeżeli umiesz korzystać z metod anonimowych, to... to są właśnie wyrażenia lambda, tylko trochę ...
Podobnych zestawień można znaleźć w sieci całe mnóstwo. Jednakowoż dorzucę swoje 11 kopiejek w postaci 11 punktów, o których dowiadywałem się z czasem i częstokroć niespodziewanie. Dlaczego 11? Bo nie mogłem się zdecydować na wykreślenie któregokolwiek z nich z listy. Poza tym Rammstein na każdym albumie zamieszcza 11 piosenek, które to stwierdzenie poddaje w wątpliwość sens jakichkolwiek związków przyczynowo-skutkowych zamieszczonych na niniejszym blogu. Ale nieważne. Tak czy siak bez znajomości tej zło...
Jak powszechnie wiadomo - wielką zaletą wzorca MVC jest umożliwienie testowania jednostkowego logiki "wyciągniętej" z klas odpowiedzialnych za interakcję z użytkownikiem. Swego czasu śledziłem w internecie dyskusje na temat "Jak testować kontrolery, aby możliwie najbardziej odizolować je od reszty aplikacji". O to przecież chodzi w Unit Testing...
Jeżeli chcemy wykonywać testy jednostkowe naszego kodu, ale posiadamy do dyspozycji jedynie wersję Express VS, ciągłe uruchamianie i konfigurowanie NUnit może być nieco uciążliwe. Oto krótka instrukcja ułatwienia sobie życia:
W .NET 3.5 (a konkretniej - C# 3.0 oraz VB 9.0) pojawił się mechanizm "extension methods". Cel przyświecający jego autorom był zaiste godny uwagi: umożliwienie dodania nowych funkcjonalności do już istniejących, skompilowanych klas. Jedna z kilku "Ruby-like features" wprowadzonych do świata .NET. Przydatność takiego rozwiązania trudno przecenić - w ten sposób rozszerzono m.in. klasy już istniejące w .NET 2.0 (*).
Eleganckie samobójstwo aplikacji ASP.NET Czasami może się zdarzyć, że nasza aplikacja ASP.NET odczuje potrzebę popełnienia samobójstwa i narodzenia się na nowo. Kiedy? Na przykład, gdy zmieni się jakiś plik konfigurujący aplikację (nie dotyczy to web.config, którego zmiana powoduje automatyczny restart) lub gdy chcemy w sekcji administracyjnej witryny dać możliwość administratorowi wykonania tego na życzenie. Wówczas pojawia się pytanie, jak to zrobić elegancko i zgodnie z lege artis? Rozwiązanie łopatol...
Policy Injection Application Block w skrócie to biblioteka pozwalająca na wstrzyknięcie kodu opakowującego wywołania metod. Dzięki temu za pomocą jednego atrybutu lub odpowiedniego wpisu w pliku konfiguracyjnym, możemy "nakazać", aby np. czas wykonania metody był mierzony i logowany. Oczywiście, różnych takich zastosowań możemy wyobrazić sobie bardzo wiele. Tyleż samo widać korzyści z zastosowania tego podejścia. Programowanie aspektowe (inaczej AOP - aspect or...
Wysłanie wiadomości e-mail w .NET jest dziecinnie proste:MailMessage message = new MailMessage( "[email protected]", "[email protected]", "Temat", "Treść"); SmtpClient smtp = new SmtpClient(); smtp.Send(message); Powyższy przykład jest bardzo krótki, choć i tak został napisany niezwykle rozwlekle - wersja zminimalizowana zajęłaby 1 linijkę (w obu przypadkach ustawienia serwera pocztowego znajdują się w pliku konfiguracyjnym). Właściwie ten kawałek kodu powinien wystarc...
Chyba trudno znaleźć programistę, który po dłuższej pracy z LINQ-to-SQL nie uznałby tej technologii za przełomową pod względem wygody i szybkości tworzenia aplikacji w porównaniu do tego, co wcześniej oferował sam .NET: DataSets oraz czyste DbConnections i spółka. Jednakże używanie tego rozwiązania na dłużą metę nie jest wolne od kilku wyzwań (i bardzo dobrze). W Linq2Sql klasą dającą dostęp do bazy danych jest DataContext (lub dziedzicząca po nim, dla silnie typowanych kontekstów)....
Bazy danych i XML 5487 dni, 7 godzin, 24 minuty temu 162 źrodło rozwiń
Ciekaw jestem ilu moich czytelników aktywnie korzysta z funkcji High DPI. Ja tak. Mój monitor natywnie pracuje rozdzielczości Full HD. Jeśli to działa wydajnie (nie narzekam) to jest to bardzo fajna cecha, ale pod warunkiem własnie, że High DPI jest wykorzystane i zaimplementowane poprawnie od systemu operacyjnego do poszczególnych aplikacji. Windows 7 podchodzi do tego tematu bardzo poważnie. Opcjami systemowymi “powiększyłem” sobie system do 125%. Odcz...