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