我有一个多线程(使用线程池)C# 程序,它从包含日志的文本文件中读取并将它们批量插入到 MongoDB 集合中。我想要一种一致且精确的方法来测量将整个文件插入集合中需要多长时间。
我不能真正调用 thread.join(因为它是一个线程池),而且我不能使用秒表,因为它们在单独的线程上运行。
下一个最好的事情是什么?
我目前的做法是智能手机上的计时器。我反复调用db.collection.stats()
并等待计数与文件中的日志数相同...
我有一个多线程(使用线程池)C# 程序,它从包含日志的文本文件中读取并将它们批量插入到 MongoDB 集合中。我想要一种一致且精确的方法来测量将整个文件插入集合中需要多长时间。
我不能真正调用 thread.join(因为它是一个线程池),而且我不能使用秒表,因为它们在单独的线程上运行。
下一个最好的事情是什么?
我目前的做法是智能手机上的计时器。我反复调用db.collection.stats()
并等待计数与文件中的日志数相同...
使用mongostat
(命令行工具)您可以准确地看到 MongoDB 服务器中发生的事情。它会每秒为您提供插入/查询等。插入完成后它不会自动停止,但它肯定会让您深入了解性能。完成导入后,“插入”将降至 0。
如果您使用的是 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