Mam dużo ram – co z tym zrobić? RAMDrive!

Mam dużo pamięci RAM! Gratuluję! Naprawdę! Ja swoją część przeznaczyłem na dysk tymczasowy, tzw. RAM Drive. To rodzaj dysku twardego, który instaluje się podczas startu systemu i nie jest zapisywany na stałe (chociaż można to zmienić). Po restarcie komputera dane z tego rodzaju pamięci znikają.

Dlaczego? Otóż przeniosłem tam wszystkie tymczasowe foldery oraz np. pamięć podręczną Firefoxa, który podczas normalnej pracy gromadzi pliki na dysku i zaśmieca system. Więcej na ten temat można przeczytać w tym wpisie: Firefox – zmiana lokalizacji domyślnego folderu tymczasowego.

Odczyt z dysku M2 jest na takim poziomie:

 

Tymczasem RamDrive osiąga takie wyniki:

Fajnie, bo działa szybciej i nie muszę martwić się, że zostają śmieci w systemie.

Jeśli chodzi o narzędzie, to korzystam z Dataram, który oferuje darmowy dysk z limitem 4 GB lub płatną wersję za rozsądną cenę. Próbowałem innych rozwiązań, ale żadne nie potrafiło zainstalować się poprawnie jako dysk w systemie Windows.

 

PS.
Od czasu do czasu pojawiają się aplikacje, które nie tolerują takiego rodzaju dysku i nie współpracują z nim. Zdarza się to jednak raz na rok lub rzadziej.

PS2.
Częściej spotykam aplikacje, które mocno zaśmiecają katalog tymczasowy. Pamiętam, że Visual Studio podczas instalacji lub aktualizacji miało problem z ograniczeniem 4 GB dla folderu tymczasowego. Tylko ostrzegam.

 

Firefox zamiana lokalizacji domyślnego folderu tymczasowego

Firefox podonie pewnie jak inne przegladarki maja swoj katalog z plikami tymczasowymi, aby zmienic jego połozenie należy wejść na adres “about:config”

Zatwierdzić chęci bycia hakerem.

Nastepnie dodać klucz:

   browser.cache.disk.parent_directory

Oraz wartość jaką sie chce, w moim przypadku te wartości różnią się pomiędzy moim komputerami, czasem jest to c:/temp/firefox czasem jest to t:/temp/firefox

O T napisze następnym razem.

I tyle, od teraz po restarcie firefox śmieci zaczną się gromadzić w nowym folderze, co ułatwi sprzątanie

SSMS ustawienie kolorów zakładki per połączenie

Wystarczy

Czara goryczy się przelała, musiałem to zrobić, bo męczyło mnie powolne sprawdzanie, na jakim środowisku pracuje.
SQL management, bo o tym mowa, ma krótki okienko z nazwą połączenia, gdzie można odczytać gdzie wykonywane są query. I aby mieć pewność, że krytyczne zmiany są wykonywane tam, gdzie powinny być, musiałem najechać kursorem myszy na taba, odczekać chwile i odczytać adres, na którym się operacja wykona:

👆 To męczące i prymitywne.

Continue reading

elasticsearch i docker

Update, Attach, SaveChanges i inne składniki EntityFrameworka

Wprowadzenie

Pracując z Entity Framework możemy doceniać jego moc oraz zapomnieć o tym, jaką potężną magią on operuje. Np. skąd ten diabeł wie, co się zmieniło, a kiedy muszę mu o tym przypomnieć.

Mam prostą regułę w głowie, jeśli wyciągam dane z kontekstu i zaraz od razu wrzucam je tam z powrotem, nie ustawiam do tego flag, nie wtrącam się, nie robię hokus-pokus i zakładam, że wszystko będzie dobrze.

Jeśli wyciągam dane na dłużej, wtedy podpowiadam EF, żeby nie śledził zmian, bo to trochę zajmie, zanim te dane wrócą do bazy danych i szkoda zachodu.

Dane można zapisać / zaktualizować na kilka sposobów:

Na raz:

  • Pobierz
  • Zmodyfikuj
  • Zapisz

Na dwa

  • Utwórz
  • Przypnij
  • Zapisz

Na trzy:

  • Nie zaglądam, jeśli działa u Ciebie to dawaj dawaj na produkcje 😉

Wygląda że proste? To sprawdzam, co i jak zadziała

W obu przypadkach mam taki oto kod:

Nie oszukujmy się, bunkrów nie ma, kontekst oraz jakiś POCO na potrzeby przykładów.

Uno

Ten przykład działa, pobieram, modyfikuje, zapisuje. EF robi magię i potrafi sam wykryć zmianę w encji – nie wymaga wywołania `update` aby znaleźć i nanieść zmiany na obiekcie. PFM! Wymagany jest natomiast strzał do bazy aby pobrać początkowy obiekt do modyfikacji.
Na plus – nie tracę informacji, który nie modyfikuje. Wrócę do tego niżej.

Duo(s)

Teraz się zacznie, co się stanie, gdy wyciągnę dane bez śledzenia i zapiszę zamiany:

Pudło! Nic, EF cichutko “zapisał” zmienione encje, ale mój odcięty obiekt nie był na tej liście, w związku z tym – nic się nie wydarzyło. Może tylko odrobina smutku. Ale sam tego chciałem, przecież mówiłem – bez śledzenia!

Spróbuje inaczej, stworze nowy obiekt, przypnę go do kontekstu i wtedy zapisze:

Hus! (Dzięki panie Łukaszu) – nie działa! Ale czemu? Przecież obiekt jest w kontekście!

Ach, obiekt został dodany, ale jest oznaczony jako unchanged! Ok-sprawdzam:

Czyli co, nawet jeśli mam nowy obiekt i przypiąłem go do kontekstu nadal nie jest śledzony? Nie koniecznie, obiekt został przypięty i jest śledzony, ale zmiany nie nastąpiły po włączeniu śledzenia. Natomiast taki kod:

Robi już robotę, zwróć uwagę, że zmiany następują po przypięci i włączeniu śledzenia zmian

Zamiast takiego cyrkolenia się, można iść na skróty i wywołać po prostu Update:

Który ustawia status obiektu na modified i zapisuje zmiany.

Turbo mega uwaga:
Oba przypadku zerują wartość dla ReleaseDate który dostanie domyślną 01.01.0001 00:00:00 wartość-trzeba tego pilnować. W przypadku gdy wcześniej ładujemy obiekt z DB a potem go modyfikujemy, ReleaseDate jest ustawiony i nie nadpisany zerową wartością.
Pewnie można by poszukać i podpowiedzieć, które właściwości zostały zmienione, ale to wymagałoby znajomości voodoo.

Dodam tylko dla optymalizacji, że gdy wyciągamy obiekt z EF, który nie będzie zmieniany, np. tylko żeby wyciągnąć i wyświetlić, warto użyć opcji `
AsNoTracking, aby podpowiedzieć EF zaprzestania śledzenia obiektów, bo zniknąć one z naszego kontekstu.

Jeśli zaistnieje potrzeba ponownego podpięcia, można zrobić attach lub update – ale to już wiesz.

 

Szczegóły tutej:
https://learn.microsoft.com/en-us/ef/core/change-tracking/

ps.
Tak naprawdę to nie korzystam z EF.

ps2.
Źródło całego pliku cs dostępne tutaj:
https://gist.github.com/jstadnicki/9a97619c26e4ba9571fa2aec40be25d3