1

我有点知道这个问题的答案,但无法真正掌握基本概念。我知道您现在总是被指示使用连接池。但是想象一下这种情况。

我需要从一个数据库和一张表中多次读取数据。

连接池将注入微秒级的开销,但为什么不通过对所有内容使用单个连接并锁定它来消除它呢?

因为它是一个数据库,一个表。我们不太可能从多线程连接池中获得任何性能提升吗?

只是希望在这里有所澄清。也许一些简单的资源可以解释为什么,连接池总是更好。

谢谢。我知道这不是最大的问题,我很感谢你的时间。我专门在.net环境中,但这是跨编程的基本概念对吗?

4

1 回答 1

2
  1. 使用一个全局连接,您需要准备好处理虚假连接失败。这些总是会发生(网络打嗝,...)。
  2. 当对单个表使用多个并发语句时,您绝对会获得并发性。SQL Server 通常不会以独占方式锁定表(非常罕见)。
  3. 您将忘记在某处使用同步协议(到处锁定)。您最终会弄错,并且必须参加比赛。
  4. 如果您有一个会阻塞整个应用程序的慢速失控查询。它将在浏览器中显示为“挂起”。
  5. 您在全局锁上序列化所有 HTTP 请求。您只使用一个 CPU。你根本不会扩展。您的应用无法很好地处理突发事件。

拥有单一的全球连接确实是个坏主意。为什么不直接使用池化?这为您节省了使用同步的开发工作。工作量就更少了。

当然,池化并不总是更好。您可以构建不是的病理案例。不过,我从未遇到过需要将连接保持打开的时间超过当前 HTTP 请求的情况。

于 2013-01-16T18:30:04.550 回答