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

.net 如何保持动态填充的数据集与程序保持一致?,.net,winforms,.net,Winforms,我有一个winform应用程序,它使用一些引用的web服务来获取数据。返回的数据是我循环使用并添加到数据集的对象数组 当我呼叫该服务时,通常需要2到3分钟才能获取所有数据 如果用户退出程序,稍后再回来,我不希望他们必须再次重新下载所有数据 当我在调试模式下运行应用程序时,下载的信息没有持久性;这让我担心 我仍然处于“开发模式”,所以我还没有真正组装一个安装程序来测试信息是否与应用程序保持一致 我对两件事很好奇: 用户退出后,数据集中存储的数据是否保留 如果没有,您会建议如何实现这一点 我考虑过使

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

当我呼叫该服务时,通常需要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
    
    如果用户单击下载按钮,系统会提示他们上次执行下载的日期,并给他们机会说“否”


    再次感谢你的帮助

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

    注意:就我个人而言,在这个场景中我根本不会使用
    DataSet
    ;如果您将数据作为对象列表下载,则只需将其保持为-
    list


    Re-xml:9-10Mb很大,但不是很大。这实际上取决于数据的性质和其他要求;除非您已经在使用web压缩(GZIP等),否则您可能会发现使用更紧凑的格式(如csv)或二进制格式(如)。您需要手动保存任何要保存的数据。您可以做的是获取数据集,并在应用程序关闭时将数据集转换为文件。然后,当应用程序打开时,如果文件存在,则从该文件反序列化数据集,而不是调用Web服务

    如果您是基于Web服务的,请考虑CLICKONE,而不是常规安装程序——部署起来要简单得多。我认为我不能同时使用CLICKONE并同时保存数据,是吗?我认为使用ClickOnce,我不能“留下”任何数据:不管怎样……回答了我自己的问题:)我实际上使用数据集作为两个DataGridView和ListBox的数据源;有没有一种方法可以使用列表来填充这些内容?列表可以很好地用作DataGridView和ListBox等的数据源。严格来说,任何
    IList
    IListSource
    都可以工作-
    list
    受益于
    public T this[int]
    索引器,它提供了比IList更强大的元数据。但要点是:使用
    List