C#Sql LocalDB应用程序性能低下



我是一个全新的sql/数据库应用程序,正在使用Visual Studio 2015 C#尝试一个简单的联系人管理应用程序。我正在使用"SQL Express LocalDB"。我在谷歌上读到它是用于开发目的的,但微软也提到它也可以用于生产目的。

我的问题是,当我从开发系统中试用应用程序时,应用程序第一次加载需要几秒钟的时间,但之后每个查询都会快速运行。当我在我的一个朋友系统上尝试这个时,每次我尝试使用任何查询都需要时间。该数据库只有20-30条记录。

我使用"new SqlConnection"创建新连接,然后执行"new SqlCommand"创建的命令,执行查询后关闭连接。

这是我的应用的代码片段

SqlConnection sqlConnection = new SqlConnection(@"Data Source = (LocalDB)MSSQLLocalDB; AttachDbFilename = ""C:ContactsDB.mdf""; Integrated Security = True; Connect Timeout = 30";);
SqlCommand sqlCmd = new SqlCommand();
sqlCmd.Connection = sqlConnection;
sqlCmd.CommandText = "SELECT Id, first_name, last_name from ContactsMaster ORDER BY first_name";
sqlConnection.Open();
SqlDataReader reader = sqlCmd.ExecuteReader();
try
{
    while (reader.Read())
    {
        ListViewItem lvi = new ListViewItem(reader["first_name"]);
        listViewItems.Add(lvi);
        lvi.SubItems.Add(reader[0].ToString());
    }
}
finally
{
    reader.Close();
}
sqlConnection.Close();

Q。应用程序运行时,我是否应该始终保持连接打开?我认为不应该建议这样做。就像应用程序崩溃一样,数据库可能会损坏。

其中一个背景是,LocalDB每隔一毫秒就会关闭一次连接。那么我应该每隔几毫秒就对数据库进行一次ping吗?或者我根本不应该在生产中使用localdb?

我想让这个应用程序在重新考虑数据库先决条件的情况下,要求非常低。就像LocalDB一样,安装非常无缝。

我没有使用过SQL Server Express,Express安装是否也像LocalDB一样无缝,我是否也可以像Express中的LocalDB一样使用连接字符串,直接提供.mdf文件名?

localdb具有自动关闭功能。默认值为5分钟。您可以将其设置为更高的值(即:12小时)。最大值为65535分钟。

请参阅:如何防止SQL Server LocalDB自动关闭?

如果我没有错的话,sqlexpress自动关闭也是1小时。

我电脑上的症状:

第一次打开速度慢10-30秒。如果我在1秒后立即重新打开应用程序。如果我等待一段时间,它再次变慢

ddbb的性能需要考虑很多因素,这不是一个简单的问题。对于如此少量的记录,不应该存在性能问题。尝试将ddbb文件存储在不同于操作系统磁盘的另一个磁盘中,更好的做法是将数据文件和日志文件也放置在不同的磁盘中。关于您的问题,连接必须始终关闭,并在finally块或using块中正确处理。Sql Express非常易于安装,而且还使用连接字符串,这是它可以在整个网络中使用的最大区别。

最终迁移到SQLite,与SQLLocalDB相比速度要快得多。

相关内容

最新更新