Petapoco 存储库模式存在重大性能问题
本文关键字:性能 问题 存在 存储 模式 Petapoco | 更新日期: 2023-09-27 18:33:45
我们正在使用 petapoco 存储库模式(类似于这篇博文(。 当页面加载时,我们打开存储库,运行查询,释放,然后继续处理。 这在浅色页面上很好,但是当这种情况在页面中发生几次时,我们会得到相当显着的性能下降。
我可能错误地认为连接池可以处理已启用的此问题。
我进行了几次测试。
它所在的页面(它是一个 aspx 页面(大约需要 1.2 秒才能加载到目前的状态。该页面正在运行大约 30 个数据库查询...并且,查看探查器,正在执行每个查询的登录和注销(即使使用连接池(。
如果我坚持连接并且在页面结束之前不关闭,则此值将降至 70 毫秒左右,这是一个相当大的节省。
也许我们需要为请求保留数据库对象,但我不认为 PetaPoco 有这么多开销......特别是连接池。
我创建了一个测试应用程序来演示它。
这表明,如果重复使用存储库,加载用户 1000 次需要 230 毫秒,但如果每次都重新创建存储库,则需要 3.5 秒。
使用连接池违反了最佳做法。
每次陈述后,它都说无处可去。我通常在处理时保留一个连接/存储库,并且仅在我的函数完成(使用 MVC(时才关闭它。
是的,即使是连接池也有开销,你似乎真的有义务制作那个节目。
我总是做的是为每个请求创建我的存储库的单个实例。因为我几乎完全使用 MVC 模式进行开发,这意味着我在每个控制器中创建一个私有类级变量,并使用它来处理 Action 方法中的任何请求。翻译成WebForms(ASPX(,这意味着我将在BeforeLoad(或PageLoad之前的任何事件(中创建一个,并根据需要传递它。我不认为保留类级实例对于 Webforms 来说是一个好主意,但我记不清了。
经验法则是对整个请求使用存储库(或任何其他类型的类(的一个实例,这通常是页面加载或 Ajax 调用。出于您指出的原因。
请记住:互联网上的信息是免费的,一分钱一分货。