什么是引发线程问题的好方法

时间:2010-01-27 12:24:09

标签: c# multithreading

我正在完成对多线程应用程序的测试,这个应用程序似乎工作正常,直到我把它置于高负载之下,然后对它正在运行的机器施加压力。然后我开始看到一些陌生人的边缘情况,我没有预见会产生一些意想不到/无法预料的情况。我强调机器的方法是在一个非常大的sqlite数据库上运行真空。有没有人有任何其他好方法来诱导这种类型的重负荷情况?

4 个答案:

答案 0 :(得分:2)

您可以使用CHESS

答案 1 :(得分:1)

答案 2 :(得分:1)

由于锁定不当导致的线程问题往往会在重负载下显露出来,因为时序会发生变化。实际上并不是产生问题的重负载,而是由于随机调度延迟而导致的时序变化。通过在线程的执行中引入随机延迟,您可以在不重负载的情况下重现问题。这是国际象棋使用的方法。

答案 3 :(得分:1)

你指的是什么样的压力?内存,CPU,完整线程池或文件I / O?

我写了一个简单的应用程序,它有一个消耗内存的线程,一个消耗CPU周期的线程,一个占用线程池的线程,以及一个使磁盘崩溃的线程。在其上挂一个UI来控制每个线程的胃口,并调整“旋钮”以使用您的应用程序鸣喇叭。