Petapoco 存储库模式存在重大性能问题

本文关键字:性能 问题 存在 存储 模式 Petapoco | 更新日期: 2023-09-27 18:33:45

我们正在使用 petapoco 存储库模式(类似于这篇博文(。 当页面加载时,我们打开存储库,运行查询,释放,然后继续处理。 这在浅色页面上很好,但是当这种情况在页面中发生几次时,我们会得到相当显着的性能下降。

我可能错误地认为连接池可以处理已启用的此问题。

我进行了几次测试。

它所在的页面(它是一个 aspx 页面(大约需要 1.2 秒才能加载到目前的状态。该页面正在运行大约 30 个数据库查询...并且,查看探查器,正在执行每个查询的登录和注销(即使使用连接池(。

如果我坚持连接并且在页面结束之前不关闭,则此值将降至 70 毫秒左右,这是一个相当大的节省。

也许我们需要为请求保留数据库对象,但我不认为 PetaPoco 有这么多开销......特别是连接池。

我创建了一个测试应用程序来演示它。

这表明,如果重复使用存储库,加载用户 1000 次需要 230 毫秒,但如果每次都重新创建存储库,则需要 3.5 秒。

Petapoco 存储库模式存在重大性能问题

使用连接池违反了最佳做法。

每次陈述后,它都说无处可去。我通常在处理时保留一个连接/存储库,并且仅在我的函数完成(使用 MVC(时才关闭它。

是的,即使是连接池也有开销,你似乎真的有义务制作那个节目。

我总是做的是为每个请求创建我的存储库的单个实例。因为我几乎完全使用 MVC 模式进行开发,这意味着我在每个控制器中创建一个私有类级变量,并使用它来处理 Action 方法中的任何请求。翻译成WebForms(ASPX(,这意味着我将在BeforeLoad(或PageLoad之前的任何事件(中创建一个,并根据需要传递它。我不认为保留类级实例对于 Webforms 来说是一个好主意,但我记不清了。

经验法则是对整个请求使用存储库(或任何其他类型的类(的一个实例,这通常是页面加载或 Ajax 调用。出于您指出的原因。

请记住:互联网上的信息是免费的,一分钱一分货。