6

C# で PowerShell プロバイダーを作成しています。プロバイダーは、ドライブのようなインターフェイスを介してアプリケーション ドメイン オブジェクトを公開します。例えば:

my:\Users\joe@blow.com
my:\Customers\Marty

このデータは、最終的にデータベースから取得されます。

データを取得するためにいつデータベースにアクセスし、いつキャッシュする必要があるかについて、優れたガイダンスを見つけることができませんでした。PowerShell が ItemExists や GetChildNames などのメソッドを何度も呼び出していることがわかりました。多くの場合、同じコマンドに対して繰り返します。たとえば、オートコンプリートのために Tab キーを押したからといって、データベースに 5 回または 6 回アクセスするのは実際的ではありません。

しかし同時に、ユーザーとしてコマンド プロンプトでGet-ChildItem( dir) と入力してリストを表示し、PowerShell の外部で何かを実行して、データが更新されたことを確認します。別のディレクトリ リストを取得すると、データベース。

問題を説明する適切な用語を (PowerShell の用語で) 知っていれば、答えを Google で検索したり、既存の重複した質問を見つけたりできると思いますが、行き詰まっています。

4

1 に答える 1

5

これは、powershell とはほとんど関係がなく、データに関係するすべてのものであり、データを更新することがいかに重要かです。単純なキャッシング スキームは、N 分後にバックエンドのデータ レイヤーへのリクエストが新しいコピーを取得し、タイマーをリセットする時間ベースのシステムを使用することです。特定のルールがどうあるべきか、すでに考えているようです。2 つの連続した「dir」コマンドが常にバッキング ストアから 2 つのプルをもたらすとは思いませんが、システムではそう考えています。だからそうしてください。

アップデート

おそらく、単純な指針として、発行されたプロバイダー コマンドごとに 1 回だけデータを更新する必要があるかもしれません。プロバイダ アイテムを操作する組み込みコマンドのリストは、次のとおりです。

  • クリアアイテム
  • コピーアイテム
  • Get-Item
  • Invoke-Item
  • Move-Item
  • 新商品
  • アイテムの削除
  • Rename-Item
  • セットアイテム

さらに、プロバイダー項目のプロパティを操作する組み込みコマンドのリストは、次のとおりです。

  • Clear-ItemProperty
  • コピー-ItemProperty
  • Get-ItemProperty
  • Move-ItemProperty
  • New-ItemProperty
  • 削除-ItemProperty
  • Rename-ItemProperty
  • Set-ItemProperty

最後に、コンテンツの読み取り/書き込みには、以下を使用します。

  • 追加コンテンツ
  • クリアコンテンツ
  • 取得コンテンツ
  • セット内容

これらの各コマンドには、NavigationCmdletProvider (階層データストア用) に対応するメソッドがあり、ここでデータを更新できます。New/Move/Rename/Remove/Set/Clear およびその他のデータ変更メソッドを実装する場合、PowerShell のプロバイダー インスタンスはシングルトンではないため、ある種の楽観的同時実行方法を使用する必要があります。いつでも 1 つ以上のインスタンスがプレイされている可能性があります。

プロトタイプを作成しやすいスクリプトから実装を取得するプロバイダーを作成しました。http://psprovider.codeplex.com/を参照してください。

お役に立てれば。

于 2011-08-09T02:16:22.010 に答える