我应该坚持这个申请数据吗?

时间:2009-03-10 13:44:06

标签: .net data-structures settings

我的应用程序中有一个类将路径标记转换为完全限定的路径。例如:它可以采用"%MYAPPDATA%"之类的字符串并返回C:\Users\user.DOMAIN\AppData\Raoming\MyApp

或者,类具有可以采用枚举而不是字符串的函数的重载。例如:它可以使用枚举AppPaths.MyAppData并返回C:\Users\user.DOMAIN\AppData\Raoming\MyApp

我需要在某处存储“查找表”,但我不确定最佳方法或结构是什么。我应该使用数据集并将表写入磁盘吗?或者只是留在记忆中?

单个路径值可以映射到字符串和枚举。我想我可以在内存中保留一个数组,其索引映射到枚举的整数值,并在传递字符串时搜索数组。

思想?

3 个答案:

答案 0 :(得分:2)

除非它特别大,否则我会在内存中使用数组。对于更多功能 - 以及更多开销 - 您可以使用列表或字典。对于许多功能 - 但很多开销 - 您可以使用内存数据集。

同样,除非你有超过250-500项,否则在你的程序运行期间使用磁盘存储是没有意义的:延迟(检索时间)和编码的开销都没有值得。

当然,您可能会将磁盘上的记录保存为长期存储(例如,在程序启动时加载)。但是,从您的问题看,如果您从操作系统中提取数据,您可能甚至不需要这样做。

答案 1 :(得分:1)

这一切都取决于你想要的表现。

您可以将数据存储在数据库表中(一个用于“原始”数据,两个用于键和枚举之间的关系),并使用简单的SQL查询进行查找。但这可能不是最快的方式,具体取决于底层数据库和缓存机制。

您还可以使用两个内存映射(字典?),以便在运行时更快地查找,并在启动时初始化它们。

答案 2 :(得分:0)

如果它不可能变大,我会把它保存在内存中 - 否则我会将它存储在数据库/文件中供以后使用。

当然这取决于您的使用情况。据我所知,您希望存储用户特定数据的路径。可能是你有一个用户类,你可以存储数据的路径?

if(Directory.Exists(User.Current.AppDataPath))

所以你可以摆脱“查询表”,因为每个用户都知道他的AppData在哪里 - 只是一个想法......