【问题标题】:Should I persist this application data?我应该保留此应用程序数据吗?
【发布时间】:2009-03-10 13:44:05
【问题描述】:

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

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

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

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

想法?

【问题讨论】:

    标签: .net data-structures settings


    【解决方案1】:

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

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

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

    【讨论】:

    • 那么我应该在构造对象时构建数组吗?
    • 是的 - 这就是我会采取的方法。如果您不想编写代码来查找匹配项,请研究 List 类型,或者更好的是 Dictionary 的通用版本。您仍然需要一个函数来进行比较,但它们非常简单。
    • 还有一个问题 - 翻译器是一种实用工具,所以我将它构建为一个包含大量案例语句的静态类。现在我需要将查找表保存在内存中,我应该使表共享状态还是使类非静态?
    • 哇——是的,你绝对应该让这个类成为非静态的。
    【解决方案2】:

    这完全取决于您想要的性能。

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-12
        • 1970-01-01
        • 1970-01-01
        • 2013-09-29
        • 2017-11-29
        • 1970-01-01
        • 2011-11-05
        • 1970-01-01
        相关资源
        最近更新 更多