我想要存储数据,大约200,000个键值对。
我知道Windows注册表对此不屑一顾,但请接受我的建议,因为技术进步了……
如果我将它存储在注册表中,并且我的应用程序在app类型的容器中(实际上它将在UWP容器中),那么注册表是我的应用程序的本地注册中心。
所以,只有我的应用程序才能访问注册表,它是windows注册表的一个子集(缩小了大小),并且我可以直接访问(例如,它没有通过Windows 10的文件访问代理程序)。
这有什么问题吗?
我将使用.net 4.7.2和C#。像SQLite这样的替代方案意味着添加组件和构建DB,而不是KVP的顶部。其他想法是esent引擎,但这需要一个.net包装器。谢谢
发布于 2020-02-02 14:10:55
具有硬编码字段大小的二进制文件包装器可以工作得很好,但存在r/w膨胀缺陷。为此,移动到内存映射的文件,这是完全令人敬畏和闪耀的快速( reg蜂箱是这样做的fyi)。
您可以在(Get|Write)PrivateProfile*.函数上使用pinvoke。那些古老的东西还能用。
总的来说,我看到了三个动机:读、写和更改,检测/通知。对于前两种情况,我确认注册表对于状态持久性来说不是很好的存储,考虑到它上的一般负载(使用sysinternals 'Path包含HK',并观察谁正在锤击(RegRead.*)或纹身注册中心(RegWrite.*))。当然,配置存储是可以的,这是注册表的最初设计意图。
监控是另一回事。这将是很好的,并将允许您去事件驱动的数据存储。
见:pinvoke.net FindFirstChangeNotification。
发布于 2018-07-16 13:12:13
正如“AlexK”所指出的。windows注册表,虽然它是一个数据库,但它没有索引,因此性能非常差。这是一个很好的理由不使用它。
我将调查ESENT和其他基于NoSQL的KVP商店。
多亏了所有的帖子。
https://stackoverflow.com/questions/51358928
复制相似问题