代码之家  ›  专栏  ›  技术社区  ›  JayTee

如何保持动态填充的数据集与程序保持一致?

  •  2
  • JayTee  · 技术社区  · 16 年前

    我有一个WinForm应用程序,它使用一些引用的Web服务来获取数据。返回的数据是一个对象数组,我循环并将其添加到数据集中。

    当我调用服务时,通常需要2到3分钟来获取所有数据。

    如果用户退出程序并稍后返回,我不希望他们再次下载所有数据。

    当我在调试模式下运行应用程序时,下载的信息没有持久性,这让我很担心。

    我仍然处于“开发模式”,所以我还没有真正组装一个安装程序来测试信息是否与应用程序保持一致。

    我对以下几点很好奇:

    1. 数据集中存储的数据是否在用户退出后保留?
    2. 如果没有,你会对如何实现这一点提出什么建议?
    3. 我考虑过XML存储;当您有9-10 MB的数据时,这是最佳选择吗?
      编辑:最终结果: 好的-这是最后的结果(感谢大家的快速反应)

    当应用程序退出时,我调用一个函数来保存数据。下面是一个片段:

       using System.IO;
       using System.Runtime.Serialization;
       using System.Runtime.Serialization.Formatters.Binary;            
       FileStream fs;
       IFormatter formatter = new BinaryFormatter();
        //activities
        if (actList.Length > 0)
        {
            fs = new FileStream("activities.bin", FileMode.Create, FileAccess.Write, FileShare.None);
            formatter.Serialize(fs, actList);
            fs.Close();
        }
        //users
        if (userList.Length > 0)
        {
            fs = new FileStream("users.bin", FileMode.Create, FileAccess.Write, FileShare.None);
            formatter.Serialize(fs, userList);
            fs.Close();
        }
    

    UserList和ActList参数是来自Web服务调用的列表对象。

    我实现的另一件事(稍微偏离主题)是创建一个应用程序设置,以便在用户上次从Web服务下载时保存。它被保存为

    Properties.Settings.Default.last_downloaded
    

    如果用户单击下载按钮,系统会提示他们上次执行下载的日期,并有机会说“否”。

    再次感谢您的帮助!

    2 回复  |  直到 16 年前
        1
  •  2
  •   Community CDub    8 年前

    .NET对象没有持久性,除非您自己编写它-例如,通过序列化到用户配置文件中的文件(或 isolated storage 对于CLICKONE)。

    注意:就个人而言,我不会使用 DataSet 在这个场景中,如果您下载的数据是一个对象列表,那么就保持这样的状态。- List<T> 等。

    re-xml:9-10MB很大,但不是很大。它实际上取决于数据的性质和其他要求;除非您已经在使用Web压缩(gzip等),否则您可能会发现,使用更紧凑的格式(如csv)或二进制格式(如 protocol buffers .

        2
  •  1
  •   GWLlosa    16 年前

    您需要手动保存要保存的任何数据。您可以做的是获取数据集,当应用程序关闭时, serialize 数据集到文件。然后,当应用程序打开时,如果文件存在,则从该文件反序列化数据集,而不是调用WebService。

    推荐文章