【问题标题】:Reporting progress on a million call process报告一百万个呼叫过程的进度
【发布时间】:2013-10-29 01:01:49
【问题描述】:

我有一个控制台/桌面应用程序,它可以从各种网络服务中抓取大量(想想数百万次调用)数据。在任何给定时间,我都有大约 10 个线程执行这些调用并将数据聚合到 MySql 数据库中。所有种子也存储在数据库中。

报告进度的最佳方式是什么?我的意思是:

  • 已经执行了多少次调用
  • 失败的次数
  • 平均通话时长是多少
  • 还剩多少

我想过以某种方式记录所有这些并跟踪日志以获取数据。另一个想法是向始终打开的 TCP 端点提供某种输出,其中某种形式的 UI 可以读取数据并显示一些聚合。这两种方式看起来都太粗糙太复杂了。

还有其他想法吗?

【问题讨论】:

  • 如果您已经在使用数据库,为什么不使用一个表来跟踪每个工作人员的状态?
  • 这是一个网站、Web 应用程序还是桌面应用程序?
  • @Malachi 我编辑了问题以澄清它。它是一个控制台应用程序。
  • 我的编辑覆盖了您的编辑,但我重新编辑了它,希望它能正常工作。哎呀

标签: c#-4.0 logging console-application progress


【解决方案1】:

“最佳方式”取决于您的要求。如果您使用像 NLog 这样的日志框架,您可以插入各种日志目标,如文件、数据库、控制台或 TCP 端点。

您还可以使用像 Harvester 这样的查看器作为日志记录目标。

在记录多线程应用程序时,我有时会有一个额外的线程每隔一段时间(例如每 15 秒)将进度摘要写入记录器。

【讨论】:

  • 目前,异常和信息记录是通过 log4net 完成的。
  • NLog 允许基于用户分配的名称、使用记录器的类等来分离日志目标。大概 log4net 有类似的东西?您可以专门为进度报告定义一个记录器目标,因此它不会与信息和异常日志混合。
  • 数据聚合怎么样?像 Harvester 这样的东西看起来我只是将日志发送到远程端点而不是文件/数据库。
  • 这一切都取决于您的要求。正如我在编辑中所述,我经常将汇总摘要写入日志目标。您还可以将该数据写入文件或数据库、命名管道或任何数量的其他机制。一切都取决于您的需求。
【解决方案2】:

因为它是一个控制台应用程序,所以只需使用Writeline,让应用程序将重要的内容吐出到控制台。

我在为export PDF's from a SQL Server Database back into PDF Format创建的应用程序中做了类似的事情

您可以通过多种不同的方式进行操作。如果您正在计算记录及其大小,您可以进行各种统计并让它显示每这么多记录的总数..


我还写了一个文本文件,这样我就可以跟踪所有的 PDF 文件以及它们的案例编号等等。该信息在我对上述链接问题的回答中。

您还可以使用统计数据每隔一段时间将内容写入文本文件。

Eric J. 提到的记录器可能会更容易实现,并且对于您的工具箱来说是一个不错的工具。

根据您的具体需求,这些选项同样有效。

【讨论】:

  • 这样做的一个缺点是,如果您需要在“日志”中进一步回顾,而不是控制台中的缓冲区行。使用日志框架,您可以同时将输出指向控制台和日志文件或数据库之类的东西。只比 Console.WriteLine 稍微多一点设置,特别是如果您使用 NuGet 来添加对日志框架的引用。
  • 我同意。让我补充一点我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-19
  • 2016-03-12
  • 1970-01-01
  • 2021-05-08
  • 1970-01-01
相关资源
最近更新 更多