与NHibernate异步存储对象,性能测试
本文关键字:性能测试 对象 存储 NHibernate 异步 | 更新日期: 2023-09-27 18:31:22
目前的情况非常复杂,但我可以归结为这一点。我在一个并发队列中有 300k 个对象(或更多,这个数字仅用于统计<> ,这些对象已准备好存储在数据库中。我使用多个线程在数据库中进行写入。当队列不为空时,每个线程执行以下操作:
- 如果可以取消排队
- 取一个对象
- 打开会话
- 打开交易
- 保留对象
- 提交事务
- 关闭会话
- 转到 1。
经过一些测试,有结果
- 2 个线程处理 300k 个对象,平均时间为 00:00:49.4008256
- 4 个线程处理 300k 个对象,平均时间为 00:00:29.6146939
- 10 个线程处理 300k 个对象,00:00:24.0903779 平均时间
- 20 个线程处理 300k 个对象,平均时间为 00:00:19.7451293
- 40 个线程在 00:00:18.2760453 平均时间内处理 300k 个对象
这是我的问题:
[1] 为什么当我将线程数加倍时,执行时间没有减半?
[2] 无论如何,是否可以在不增加事务中的对象数量的情况下改进这一点。
我正在使用 NHibernate 和 MSSQL 2012。
您可能会将
线程数增加一倍,但您只是将瓶颈转移到 SQL Server 实例。您没有将需要在一半的时间内完成相同工作的资源翻倍。
如果可能的话,我想看看线程的代码,想不出任何建议。
关于你的问题
[1] 为什么当我将线程数增加一倍时,执行时间没有减半?
当您增加线程时,您不必提前完成工作。
其原因可能是可用内存或其他资源较少用于运行应用程序。操作系统将决定这一切。