实时数据记录设计方法?

时间:2011-11-11 05:29:08

标签: c# wpf oop design-patterns

我正在使用wpf中的实时跟踪日志记录应用程序。我正在从UDP端口读取记录的数据并根据我的模态类转换它。我担心的是,考虑用户是否保持应用程序打开在很长一段时间内,应用程序将使用大量内存。我在可滚动列表中显示日志信息,因此用户可以向上滚动并获取以前的日志。我正在寻找一种设计方法,以便我可以通过最佳的内存使用来提供最佳的结果。那么这种应用的最佳设计方法是什么?

3 个答案:

答案 0 :(得分:1)

“实时”意味着只要数据可用应用程序就应该拿起并显示。没有其它的方法。

  • 如果从用户的角度来看这是合适的,并且按需加载历史数据,您可以考虑清理已经预览的日志信息。
  • 另外一个可能的解决方案是优化LogInformation数据模型,因此您正在显示的实体将需要更少的内存,考虑到显示了大量条目并且可能导致每个单个保存的字节,这可能是显着的改进在MegaBytes中保存的内存,所以请分享一些绑定到UI的实体代码,并指出哪些字段/属性确实需要显示给最终用户
  • 对于某种数据,您可以实现Lazy Loading并根据需要从DB /文件系统请求数据。例如,当用户打开UI列表中特定LogInfo条目的详细信息表单时,您正在请求完整描述等高级信息,因此您不需要将其始终保留在内存中,而用户不要通过打开“更多”详情“表格
  • 如果您的Applicaiton的DB调用成本很高,您可以以序列化格式在文件系统上存储一些信息,并以延迟加载方式按需加载。

在没有用例和标准工作流程知识的情况下,很难提出具体的建议。因此,请提供更多详细信息,了解用户如何使用此应用程序,以便了解更多想法。

答案 1 :(得分:0)

可能有用的一个想法是添加一个“监听器”,看看程序是否被更改,或者在让我们说5分钟看似空闲后弹出窗口会询问您是否要继续。一旦用户点击“确定”

,它就会重新连接

那会有用吗?我假设内存使用在日志服务器上。

答案 2 :(得分:0)

好像你有两个要显示的数据。您可以使用UI虚拟化。 VirtualizingStackPanel 可以通过不为所有日志行创建UI元素直到用户滚动到它来执行您想要的操作。一个例子对于stackoverflow来说太长了。网上有很多例子。

http://bea.stollnitz.com/blog/?p=338

另一方面,如果因为日志数据过多而导致内存需求过高。考虑将其写入磁盘上的数据库。