使用C#创建,存储和检索动态数据

时间:2012-03-12 19:16:14

标签: c# dynamic store

我有多个动作同时运行。当动作1完成时 - 它随后是动作Nr.2,然后是3,然后是1或9或9再次或10或7 ...随机顺序。

enter image description here

我需要:

  1. 存储因行动/活动而获得的数据。

  2. 在相同的操作继续时检索此数据!

  3. 我可以识别行动:

    • 通过唯一ID

    以下是我的想法:

    1. 启动程序。

    2. 第一步是检查新活动的数据是否存在 - 为此我们抓取ID并进行检查。

    3. 由于这是我们的新/第一个动作/活动,因此没有任何过去的数据,所以在动作结束时我们创建并将新数据保存到某种动态存储中。

      string [,] ID123 = new string [2,3] {{“120”,“200”,“#ffc90e”},{“380”,“200”,“#22b14c”}};

    4. 当行动1结束时,动作2开始,实际上,我们的行为与第3页中的行为相同。

      string [,] ID456789 = new string [2,3] {{“10”,“5”,“#40”},{“6”,“8”,“#80”}};

    5. 现在又是活动1了!我们通过唯一的 ID 来识别它。这一次,如果我们搜索现有数据,我们会发现:

      string [,] ID123 = new string [2,3] {{“120”,“200”,“#ffc90e”},{“380”,“200”,“#22b14c”}};

    6. 现在我根据需要进行编辑 + 添加新值。继续。

    7. 我想到的最简单的解决方案之一是 - 只需创建一个名为“ ID .txt”的临时文件。不幸的是,我将同时运行多达10-15个动作,因此这种方法不会像我将所有内容记录到内存中一样快。问题是 - 我该怎么办?< / strong> sql? TXT?

      一些事实:

      • 不同活动

      • 的ID始终不同
      • 我不知道精确的活动计数(在10到15之间变化)

      • 我需要存储一个数组类型数据,即

      string [,] array:1,15,32,12

      2,11,efg,0

      5,9,5,abc

      ...

      • 类似的问题:Dynamic array in C#

      • 我的代码中会有一些条件会触发“数据删除”,但操作会有生命周期;)

1 个答案:

答案 0 :(得分:1)

目前还不清楚你在这里想要完成什么,行动进入这个链的地方和方式,以及你需要如何处理它们。

至于跟踪当前正在进行的操作,您需要的只是正确的并发性。 .NET 4.0中内置了几个可以使用的对象,或者您可以创建自己的对象。由于这些数据是动态的,因此可能不应该保留,除非您希望您的进程能够在终止后准确地获取它停止的位置。因此,您可以使用一个ConcurrentDictionary<string, string[,]>来存储二维数组,这些数组由一个ID字符串键入,该字符串在字典中必须是唯一的(即使两个ID的数组具有相同的维度和值) 。并发检查是内置的,这意味着您可以让多个线程对此Dictionary执行多个操作,而不必担心两个线程可能同时尝试读取或写入同一事物的“竞争条件”。

请注意,无论出于何种原因,当流程结束时,作为流程一部分的内存中的数据将不复存在。如果您不希望这种情况发生,您可以拥有一个线程,其任务是将ConcurrentDictionary的内容保存到文件或数据库中。由于它是一个线程,从线程安全的数据集中读取,因此很大程度上避免了文件写入中的并发问题,因为ConcurrentDictionary中的一条记录不依赖于另一条记录中的数据(您仍然可以处理其中一条记录的情况)记录确实取决于另一个,但它变得更复杂)。此线程可以在执行其他操作期间“启动”,也可以基于计时器或您选择的任何内容来满足您的需求。