我不确定你使用你的连接的上下文是什么,但我可以分享似乎为我工作的内容。
我使用SQL服务器作为我的后端,并结合使用缓存来获得更好的性能。 我的做法是保持连接打开,只有当我真的需要它并且不要连接池以便它们立即清理时,我可以在SQL Activity监视器中看到究竟什么是活动的,哪些不是。每个连接都会占用内存,因此在不需要时将其保持沉闷的咆哮是很好的。
在我回答连接开放和关闭问题之前,让我说缓存是非常重要的。从缓存中获取对象将为您节省大量时间。在我开发的一些asp.net应用程序中,当我在开发中进行缓存时,我发现我几乎无法测量延迟,而使用数据库调用可能需要15ms到45ms的任何时间来完成调用,这甚至不考虑其他延迟因素或负荷。我使用的另一种方法是用于我的数据的一种很好的对象结构,这样我只在数据库更新时才进行更新。我在我的对象上实现了一些方法o确保我尽可能少做IO。
话虽这么说,我们都知道,我们需要访问并在某些时候写信给我们的数据库,所以我遵循两个原则:
保持关闭,以节省能源的门窗。一个地方的开放连接意味着它在另一个地方不可用(或者内存和其他资源更有限)。我们已经关闭了,因为它为我们带来了更好的表现。
我可以在连接打开的情况下尽可能批量或一次性完成。这有点复杂,所以让我解释一下。
- 我使用的一种方法是将我的连接对象向下传递给管道,以便所有对象都可以使用一个连接对象。这会导致一个连接打开和关闭,而不是10个或更多,具体取决于您的应用程序。一个很好的例子就是我们的采购模式之一,它利用SQL服务器的强大功能来收集统计数据并散列出复杂的排序模式。当您进行200K + DB查找或任何应用程序的查找时,继续打开和关闭连接是没有意义的。另一部分是,当我使用对象时,我尝试捆绑更新以减少保持连接打开的时间。因此,对插入调用做一个scope_identity让我来处理我的插入和查找唯一标识以在缓存之前添加到对象中。 回到刚开始开发asp应用程序的那一天,我实际上在页面开始加载后立即打开连接,然后关闭它。我不建议再这样做。现在每天对这些抽象和层次都有很大的好处,我会建议任何新手程序员仔细关注。
我的两分钱:
缓存您的数据!缓存你的数据!缓存你的数据!在无法缓存并缓存数据时尽可能少地访问数据库!