0

I have a class in my application that translates path tokens into fully qualified paths. For example: it can take a string like "%MYAPPDATA%" and return C:\Users\user.DOMAIN\AppData\Raoming\MyApp.

Alternatively, the class has an overload to the function that can take an enum instead of a string. For example: it can take the enum AppPaths.MyAppData and return C:\Users\user.DOMAIN\AppData\Raoming\MyApp.

I need to store the "lookup table" somewhere, but I'm not sure what the best method or structure is. Should I use a dataset and write the table to disk? Or just keep in it memory?

A single path value can map to a string and an enum. I suppose I can just keep an array in memory whose index maps to the integer value of the enum and do a search through the array when I'm passed a string.

Thoughts?

4

3 回答 3

2

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

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

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

于 2009-03-10T13:56:50.363 回答
1

这一切都取决于您想要的性能。

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

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

于 2009-03-10T13:57:38.863 回答
0

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

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

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

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

于 2009-03-10T13:57:50.627 回答