0

我正在用 c# 在 vs 中制作一个数据库应用程序。最初我使用的是用 sql server 创建的数据库。我的 app.config 是

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
 <connectionStrings>
<add name="ConString" connectionString="Data Source=ARAVIND-HP\SQLEXPRESS;Initial Catalog=businessdata;Integrated Security=True"
    providerName="System.Data.sqlClient" />


</connectionStrings>
</configuration>

在此之后,我改用本地数据库。我将数据库复制到项目解决方案中。Visual Studio 自动配置了 app.config。新的 app.config 是

<?xml version="1.0" encoding="utf-8" ?>
 <configuration>
<configSections>
</configSections>
<startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings>
  <add name="Small_Business_Management.Properties.Settings.businessdataConnectionString1"
    connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\businessdata.mdf;Integrated Security=True"
    providerName="System.Data.SqlClient" />


  </connectionStrings>
  </configuration>

现在,当我使用这个本地数据库时,我注意到执行操作比使用 sql server 数据库需要多 1 到 2 秒(有时甚至更多)。为什么会有这种性能差异?

4

1 回答 1

4

你真的把两件事混为一谈了,因为 SQL Server 是一个也可以在本地计算机上运行的软件。

要点是,与“真实”数据库服务器相比,您的本地计算机很可能很糟糕。大多数人没有拥有大量内存和 IO 的工作站(尽管 IO 端随着 SSD 的变化而变化)。所以,问题不是“本地与非本地”,而是“工作站与服务器”,是的,服务器可以比小型本地工作站更强大,这取决于它在技术上的设置方式。我见过具有 100 多个内核、TB 级 SSD 缓存和一百多个磁盘来处理 IO 需求的数据库服务器。

在消极方面,显然,服务器必须向您发送数据。即使 1 Gigabit 比本地安装的 SQL Server 的内存传输慢。但这仅在(a)您提取大量数据并且(b)您不对其进行大量处理时才相关 - 这使得这更像是一个学术案例。

现在,在你的情况下它变得更好。您甚至没有安装本地 SQL Server(或:不使用它),而是使用 LocalDb - 这显然不是“服务器级”系统。Localdb 是一种“改进的快递”(http://blogs.msdn.com/b/sqlexpress/archive/2011/07/12/introducing-localdb-a-better-sql-express.aspx),其中快递是资源使用受限(内存、CPU)。您的服务器很可能是一个真正的服务器,因此它将使用比 Express 甚至希望拥有的更多的 rssource,这仅限于:

  • 仅限于 1 个插槽或 4 个内核中的较小者
  • 1 GB

以今天的标准来看,这是相当可悲的。现在,在同样的条件下 - 对于较小的数据库来说,这相当多,如果数据库很小,那就相当多。但是当你击中更大的东西时——然后在上面放一个小数据库——事情就会飞起来。

所以,这取决于。是的,服务器可以比本地机器强大很多。

希望从情况中得到正确的结果-另一种选择是您在同一台机器上同时启动,在这种情况下,它可能只是启动时间。LocalDb 将 IIRC 在不使用时关闭数据库,因此无论内存可用性如何,它都是“冷的”。SQL Server 保持数据库处于活动状态,因此 - 它是“热的”(即加载的页面仍在内存中,而 localdb 必须从磁盘再次获取它们)。

许多“这取决于”。一些“关于你的配置”。

于 2013-01-15T11:15:59.173 回答