我想存储大约20万个键值对的数据。
我知道Windows注册表对此不满意,但是随着技术的进步,请耐心等待...
如果我将其存储在注册表中,并且我的应用程序位于App-V类型的容器中(它实际上将位于UWP容器中)-那么注册表对于我的应用程序是本地的。
因此,只有我的应用程序可以访问注册表,它是Windows注册表的一部分(减小了大小),并且我可以直接访问(例如,它没有通过Windows 10的文件访问代理)。
这有问题吗?
我将使用.net 4.7.2和C#。诸如SQLite之类的替代方法意味着在KVP的顶部添加组件并构建数据库。其他想法是esent引擎,但这需要.net包装器。 谢谢
答案 0 :(得分:1)
具有硬编码字段大小的二进制文件包装程序可以很好地工作,但具有r / w膨胀的缺陷。为此,转到内存映射文件,这些文件非常棒且运行迅速(常规配置可以通过这种方式完成)。
您可以在(Get|Write)PrivateProfile*.
函数上使用pinvoke。那古老的东西仍然有效。
总的来说,我看到3个动机:读取,写入和更改检测/通知。
对于前两个,我确认注册表不是用于状态持久性的良好存储(考虑到其上的一般负载)(请使用sysinternals procmon过滤器“路径包含HK”进行检查,并观察谁在敲击(RegRead.*
)或纹身注册表(RegWrite.*
)。
当然,配置存储还可以,这是注册表的原始设计意图。
监控是另一回事。这样很好,可以让您进行事件驱动的数据存储。
请参阅:pinvoke.net FindFirstChangeNotification。
答案 1 :(得分:0)
@AlexK指出。 Windows注册表虽然是数据库,但未建立索引,因此性能将非常差。这是不使用它的重要原因。
我将调查ESENT和其他基于NoSQL的KVP存储。
感谢所有帖子。