Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我是否可以将控制台应用程序的输出数据集存储在内存中,以便下次执行?_C#_.net_Caching_Console Application - Fatal编程技术网

C# 我是否可以将控制台应用程序的输出数据集存储在内存中,以便下次执行?

C# 我是否可以将控制台应用程序的输出数据集存储在内存中,以便下次执行?,c#,.net,caching,console-application,C#,.net,Caching,Console Application,我有一个控制台应用程序,几乎每分钟运行一次。 它产生了一些数据 在这一点之前都很好 我的问题是: 如果我想对数据执行一个逻辑,“该数据是在上一次执行中由同一个控制台应用程序生成的”;如何检索以前的数据 请注意,我希望避免每分钟往返Db,我正在考虑是否有办法保留console应用程序。数据以某种方式存储在内存中。如果可能,请将数据表另存为XML,然后在需要时在数据表中读回此XML。那会对你有用的 -使用指定的文件将数据表的当前内容写入为XML -将XML架构和数据从指定文件读取到DataTable

我有一个控制台应用程序,几乎每分钟运行一次。 它产生了一些数据

在这一点之前都很好

我的问题是: 如果我想对数据执行一个逻辑,“该数据是在上一次执行中由同一个控制台应用程序生成的”;如何检索以前的数据


请注意,我希望避免每分钟往返Db,我正在考虑是否有办法保留console应用程序。数据以某种方式存储在内存中。

如果可能,请将数据表另存为XML,然后在需要时在数据表中读回此XML。那会对你有用的

-使用指定的文件将数据表的当前内容写入为XML


-将XML架构和数据从指定文件读取到DataTable中。

您将无法将数据保留在内存中,因为当程序完成执行时,数据将丢失

有两种选择:

  • 将数据写入本地文件,然后在下次程序运行时将其读回
  • 修改程序,使其连续运行并循环。在这种情况下,由于程序尚未终止,您将能够将数据保存在内存中

  • 您可以将数据存储在HD上。首选的方法是使用BinaryFormatter。 例如:


    我不测试它,但您可以尝试将其加载/保存到(.NET 4.0)

    为什么是XML而不是纯文本文件?(这会对性能产生影响吗?@pencilCake-因为我认为它已经是一种可以在数据表中轻松写入和读取xml的方法,y xml fil..纯文本也可以;数据的格式是什么?它是应用程序写入控制台窗口的内容吗?它是实体的集合(来自我的域模型)
        public static Byte[] SerializeObject(Object obj)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.TypeFormat = FormatterTypeStyle.TypesWhenNeeded;
            formatter.AssemblyFormat = FormatterAssemblyStyle.Simple;
    
            using(MemoryStream stream = new MemoryStream())
            {
                formatter.Serialize(stream, obj);
                return stream.ToArray();
            }
        }
        public static Object DeserializeObject(Byte[] bytes)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.TypeFormat = FormatterTypeStyle.TypesWhenNeeded;
            formatter.AssemblyFormat = FormatterAssemblyStyle.Simple;
    
            using(MemoryStream stream = new MemoryStream(bytes))
                return formatter.Deserialize(stream);
        }