2011-08-09 15 views
6

Piszę dostawcę PowerShell w języku C#. Dostawca udostępnia obiekty domeny aplikacji za pośrednictwem interfejsu podobnego do dysku. Na przykład:W dostawcy PowerShell, kiedy odświeżasz vs dane pamięci podręcznej?

my:\Users\[email protected] 
my:\Customers\Marty 

Dane ostatecznie pochodzą z bazy danych.

Nie mogłem znaleźć żadnych wskazówek dotyczących tego, kiedy należy udać się do bazy danych w poszukiwaniu danych i kiedy należy ją buforować. Uważam, że PowerShell wielokrotnie wywołuje metody takie jak ItemExists i GetChildNames; często wielokrotnie dla tego samego polecenia. Nie jest praktyczne, aby przejść do bazy danych 5 lub 6 razy tylko dlatego, że na przykład kliknęli Tab dla autouzupełniania.

Ale w tym samym czasie, jako użytkownik w wierszu polecenia, jeśli wpisuję Get-ChildItem (dir) i wyświetlić listę, a następnie zrobić coś poza PowerShell tak, że wiem, że dane są odświeżane, biorąc kolejną listę katalogów należy się spodziewać aby zobaczyć wszelkie zmiany w bazie danych.

Czuję, że gdybym znał właściwy termin, aby opisać mój problem (w języku PowerShell), byłbym w stanie odpowiedzieć na Google lub znaleźć istniejące zduplikowane pytanie, ale utknąłem.

+3

"Istnieją dwa trudne problemy w inżynierii oprogramowania: nazywanie, unieważnianie pamięci podręcznej i wyłączanie przez jeden błąd." – Richard

Odpowiedz

5

Ma to niewiele wspólnego z PowerShell i wszystkim, co ma związek z Twoimi danymi, i jak ważne jest odświeżenie. Prostym schematem buforowania byłoby użycie systemu opartego na czasie, w którym po N minutach żądanie do warstwy danych z tyłu wygenerowałoby świeżą kopię i zresetowałoby licznik czasu. Wygląda na to, że już wiesz, jakie powinny być twoje reguły. Nie sądzę, aby dwa kolejne polecenia "dir" zawsze powodowały dwa ciągnięcia ze sklepu, ale uważasz, że tak jest w twoim systemie. Zrób tak.

UPDATE

Być prosta zasadą może być, że należy tylko odświeżyć swoje dane raz na polecenia wydawane dostawcy.Lista poleceń wbudowanych, które działają na pozycji dostawcy składa się z:

  • Clear-Item
  • Copy-Item
  • Get-Item
  • Invoke-Item
  • Move-Item
  • New-Item
  • Remove-Item
  • Rename-Item
  • Set-Item

Dodatkowo, lista poleceń wbudowanych, które działają na pozycji dostawcy właściwości wchodzą:

  • Clear-ItemProperty
  • kopiowaniem ItemProperty
  • Get- ItemProperty
  • Move-ItemProperty
  • Nowość-ItemProperty
  • Remove-ItemProperty
  • Rename-ItemProperty
  • Set-ItemProperty

I wreszcie, do czytania/pisania treści, używamy:

  • Add-Content
  • jasne zawartość
  • Get-Content
  • Zawartość zestawu

Każde z tych poleceń ma odpowiednią metodę w narzędziu NavigationCmdletProvider (w przypadku hierarchicznych magazynów danych) i tutaj można odświeżyć dane. Implementując metody New/Move/Rename/Remove/Set/Clear i inne metody zmiany danych, należy użyć pewnej optymistycznej metodologii współbieżności, ponieważ instancje dostawców w PowerShell nie są pojedynczymi; w dowolnym momencie może występować jedna lub więcej instancji.

pisałem dostawcę, który zajmuje jego realizację od skryptu, który można znaleźć łatwiej prototypowych rzeczy w. Zobacz http://psprovider.codeplex.com/

nadzieję, że to pomaga.

+1

Obecnie używam podejścia opartego na czasie. Ale czuje się hackish. Z pewnością w PowerSleju znajduje się odpowiedni wskaźnik, który rozróżnia, kiedy wywołuje metodę 5 razy podczas wykonywania jednego polecenia i kiedy uruchomione jest nowe polecenie lub nowy potok. –

+0

Aby zaoferować inny przykład. Jeśli ktoś napisał skrypt .ps1, który zawierał jakąś interakcję z dostawcą i wykonywanie istniejących narzędzi, które mają wpływ na bazę danych, mogą następować kolejne milisekundy, z operacjami zmiany danych pomiędzy nimi. Wydaje się, że nieprofesjonalne jest sugerowanie, aby ci ludzie sypiali lub opóźniali swój scenariusz, aby mnie przyjąć.I wydaje się również błędne, aby przejść do bazy danych dla każdej metody dostawcy, gdy metody te są wywoływane wiele razy podczas wykonywania jednego polecenia. To, jak sądzę, problem, z którym się zmagam. –

+0

OK, pozwól mi dodać trochę szczegółów do mojej odpowiedzi. – x0n

Powiązane problemy