gpt4 book ai didi

powershell - 在 PowerShell 提供程序中,何时刷新与缓存数据?

转载 作者:行者123 更新时间:2023-12-02 16:21:06 25 4
gpt4 key购买 nike

我正在用 C# 编写一个 PowerShell 提供程序。提供者通过类似驱动器的接口(interface)公开应用程序域对象。例如:

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

这些数据最终来自于数据库。

对于何时应该访问数据库以及何时应该缓存数据,我找不到任何很好的指导。我发现 PowerShell 多次调用 ItemExists 和 GetChildNames 等方法;经常重复执行同一个命令。例如,仅仅因为按 Tab 键进行自动完成而访问数据库 5 或 6 次是不切实际的。

但同时,作为命令提示符下的用户,如果我键入 Get-ChildItem (dir) 并查看列表,则可以在 PowerShell 之外执行某些操作这样我就知道数据已刷新,采用另一个目录列表应该可以看到数据库的任何更改。

我觉得如果我知道描述我的问题的正确术语(用 PowerShell 的说法),我就能够通过 Google 搜索答案或找到现有的重复问题,但我陷入了困境。

最佳答案

这与 powershell 关系不大,而与您的数据以及刷新数据的重要性有关。一个简单的缓存方案是使用基于时间的系统,在 N 分钟后,对后端数据层的请求将提取新的副本并重置计时器。看来您已经知道您的特定规则应该是什么。我不认为两个连续的“dir”命令应该总是导致从后备存储中提取两次,但对于您的系统来说,您确实是这么认为的。所以就这样吧。

更新

也许一个简单的指导原则可能是,每个提供程序发出的命令应该只刷新一次数据。对提供者项目进行操作的内置命令列表包括:

  • 透明元素
  • 复制项目
  • 获取项目
  • 调用项目
  • 移动项目
  • 新项目
  • 删除项目
  • 重命名项目
  • 设置项目

此外,对提供程序项目属性进行操作的内置命令列表包括:

  • 清除项目属性
  • 复制项目属性
  • 获取项目属性
  • 移动项目属性
  • 新项目属性
  • 删除项目属性
  • 重命名-ItemProperty
  • 设置项目属性

最后,对于读取/写入内容,我们使用:

  • 添加内容
  • 内容清晰
  • 获取内容
  • 设置内容

其中每个命令在 NavigationCmdletProvider(对于分层数据存储)中都有相应的方法,您可能希望在此处刷新数据。在实现 New/Move/Rename/Remove/Set/Clear 等数据更改方法时,您应该使用某种乐观并发方法,因为 PowerShell 中的提供程序实例不是单例;任何时候都可能存在一个或多个实例。

我编写了一个提供程序,它从脚本中获取其实现,您可能会发现在其中创建原型(prototype)更容易。请参阅 http://psprovider.codeplex.com/

希望这有帮助。

关于powershell - 在 PowerShell 提供程序中,何时刷新与缓存数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6990295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com