【问题标题】:Where are the common places to store application data存储应用程序数据的常见位置在哪里
【发布时间】:2011-02-23 02:55:58
【问题描述】:

我正在开发基于 Windows 的桌面应用程序,当应用程序启动时,我需要在某处存储一些小数据。

目的是在同一个App的实例之间共享一些数据。同样,数据的大小非常小,在这种情况下,它只是一个字符串。

我做了一些研究,发现有以下选择:

  1. MSMQ
  2. 注册表
  3. 纯文本文件
  4. 共享内存
  5. .Net 配置模型

现在我正在使用最简单的一个 - #3。我想知道其他人如何处理同样的问题?有什么建议吗?

谢谢

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    添加 5:.net 配置模型。您可以在项目设置 -> 设置下设置字段,这些字段将在 Settings 对象中的命名空间 AssemblyName.Properties 中可用。

    如果你真的需要自己做,我建议你将这些文件保存在%appdata%\YourProgramName。您可以通过Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)获取路径。

    【讨论】:

    • 谢谢,我目前也将数据保存到 %appdata% 文件夹中。
    • 问题@Femaref,将数据保存到.net 配置模型支持进程之间的数据共享?我不这么认为。
    【解决方案2】:

    文件系统是保存数据的最佳场所。如果设置是针对每个用户的,请将文件存储在用户的主文件夹中。如果设置在用户之间共享,请将文件存储在共享数据目录中(这是我上次使用 Windows 时的C:\Program Files)。您应该在其中任何一个位置为您的应用程序创建一个子目录。

    一个简单的文本文件适合一个简单的字符串。

    json 或 yaml 等数据交换格式适用于复杂的数据结构。

    数据库,例如 SQLite(通常存储在 .db 文件中)非常适合需要频繁地在磁盘上读取和写入数据的情况。

    【讨论】:

      【解决方案3】:

      您也许可以使用 C# 项目中可用的内置设置。
      这是有关如何在 C# 项目中使用设置的 MSDN 链接。

      MSDN Settings Tutorial

      如果您需要更复杂的东西,平面文件也可能适合您的需要。

      【讨论】:

        【解决方案4】:

        如果您要存储的数据不敏感,则可以将其存储在纯文本文件中。 使用 %appdata% 更加集中,我喜欢这个想法。

        【讨论】:

          【解决方案5】:

          我认为您关于使用哪种方法的问题的答案取决于您使用的流程。如果您正在为您的开发运行更多的敏捷过程,我会在您的迭代期间做最低限度的工作,以便在您的应用程序之间成功存储和共享设置。随着越来越多的要求浮出水面,即应用程序需要什么或可能的性能成为问题,只需重新设计您的解决方案以满足新要求。

          但是,如果您在开发中遵循更多的瀑布流程(预先进行大型设计),并且如果您完全预计您的应用程序的需求将超出您目前所知道的范围(这显然经常发生)然后我会设计并构建一个过去众所周知的解决方案。某种数据库引擎,无论是像 MySQL 或微软的 SQL Server 这样的重量级数据库引擎,还是像 SQLite 这样的轻量级版本,都将提供一种结构良好的机制来在多个应用程序之间共享数据。

          这里还有 another discussion 在 stackoverflow 上关于是否使用 SQLite 或 XML 进行设置。

          【讨论】:

            【解决方案6】:

            我结合使用数据库来获取更安全的用户特定数据,例如用户名和分数(我正在创建游戏),并使用注册表来获取更多全局设置。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-04-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多