通过应用程序关闭持久列表<int> </int>

时间:2010-07-22 12:18:55

标签: c# .net xml persistence

短版

我有一个int列表,我需要弄清楚如何坚持通过应用程序关闭。不是永远,但是,你得到了这个想法,我不能让它在处理之前消失。处理它的方法将删除列表中的条目。

我有什么选择? XML?

背景

我们有一个WinForm应用程序,它使用本地SQL Express数据库参与与中央服务器的合并复制。这将很难解释,但我们也有(一种)I系列400服务器,一小部分数据也被写入。由于各种原因,I系列无法通过复制获得,因此所有“写入”都需要在可用时完成。

我首先想到解决这个问题,只需要一个存储需要更新的PK的List对象。然后,在成功同步之后,我将有一个检查该列表的方法,并为列表中的每个PK调用UpdateISeries()一次。我很确定这会起作用,除非他们关闭不当或失去电力等等。那么,有没有人对如何解决这个问题有更好的想法? XML文件可能,虽然我从来没有这样做过。我担心由于复制而在SQL Express中实际创建一个表......可能没有根据但是......

作为参考,UpdateISeries(int PersonID)是内部使用的DLL中的现有方法。重写它作为这个问题的潜在解决方案,当时真的不可行。

3 个答案:

答案 0 :(得分:3)

听起来你需要序列化和反序列化某些对象。

请参阅these .NET主题以了解更多信息。

从链接页面:

  

序列化是将对象的状态转换为可以持久或传输的形式的过程。序列化的补充是反序列化,它将流转换为对象。这些过程共同使数据易于存储和传输。

如果磁盘格式对于人类可读而言并不重要,并且您希望它尽可能小,请查看binary serialization

答案 1 :(得分:1)

使用序列化机制可能是要走的路。以下是使用BinaryFormatter的示例。

public void Serialize(List<int> list, string filePath)
{
  using (Stream stream = File.OpenWrite(filePath))
  {
    var formatter = new BinaryFormatter();
    formatter.Serialize(stream, list);
  }
}

public List<int> Deserialize(string filePath)
{
  using (Stream stream = File.OpenRead(filePath)
  {
    var formatter = new BinaryFormatter();
    return (List<int>)formatter.Deserialize(stream);
  }
}

答案 2 :(得分:0)

如果您已经拥有并与SQL数据库交互,请使用它来获取具有较少依赖性的更简单的代码。可以将复制配置为忽略其他表(即使您必须将它们放在另一个模式中)。这样,您就可以避免许多潜在的数据损坏问题。