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);
}