我有一个多线程(使用线程池)C#程序,它从包含日志的文本文件中读取并批量插入到MongoDB集合中。我想要一种一致且精确的方法来衡量将整个文件插入集合所需的时间。
我无法真正调用thread.join(因为它是一个线程池),我不能使用秒表,因为它们在不同的线程上运行。
下一个最好的东西是什么?
我正在做的当前方式是智能手机上的计时器。我反复拨打db.collection.stats()
并等到计数与文件中的日志数相同...
答案 0 :(得分:1)
使用mongostat
(命令行工具),您可以清楚地看到MongoDB服务器中发生了什么。它会每秒为您提供插入/查询等。插入完成后它不会自动停止,但它肯定会让您对性能有所了解。完成导入后,“插入”将降至0.
答案 1 :(得分:1)
如果您使用的是C#4.0+,我建议您使用CountdownEvent课程。使用该类,您只需创建一个具有日志数的实例,例如作为计数器:
var countdown = new CountdownEvent(numberOfLogs);
然后,每次完成对MongoDB的写入时,都会从工作线程发出信号:
countdown.Signal(); // decrement counter
然后,在您的主要流程(或其他主题)中:
countdown.Wait(); // returns when the count is zero
// All writes complete