C# Sql LocalDB 应用程序性能缓慢
C# Sql LocalDB Application Slow Performance
我是全新的 sql/database 应用程序,正在尝试使用 Visual Studio 2015 C# 的简单联系人管理应用程序。我正在使用 'SQL Express LocalDB'。我在 google 上读到它是用于开发目的,但微软也提到它也可以用于生产目的。
我的问题是,当我从我的开发系统试用应用程序时,应用程序第一次加载需要几秒钟,但之后每个查询都运行得很快。当我在我朋友的一个系统上尝试这个时,每次我尝试使用任何查询都需要时间。数据库只有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();
问。当应用程序处于 运行 时,我应该一直保持连接打开吗?我认为不应该建议这样做。好像应用程序崩溃数据库会损坏。
人们说 LocalDB 每隔几毫秒关闭一次连接的背景之一。那么我应该每隔几毫秒就对数据库执行一次 ping 操作吗?或者我根本不应该在生产中使用 localdb?
我想让应用程序对数据库先决条件的要求非常低。 Like LocalDB安装真的是天衣无缝。
我没有使用过SQL Server Express,Express 安装是否也像LocalDB 一样无缝,我可以在Express 中使用像LocalDB 一样的连接字符串,直接给出.mdf 文件名吗?
ddbb 的性能需要考虑很多因素,这不是一个简单的问题。对于如此少量的记录,不应该有性能问题。尝试将 ddbb 文件存储在不同于 OS 磁盘的另一个磁盘中,更好的是,将数据文件和日志文件也放在不同的磁盘中。
关于您的问题,连接必须始终关闭并在 finally 块或 using 块内正确处理。
Sql Express非常容易安装,而且还使用连接字符串,最大的不同就是它可以跨网络使用。
最终迁移到 SQLite,这比 SQLLocalDB 快得多。
localdb 有自动关闭。默认为 5 分钟。您可以将其设置为更高的值(即:12 小时)。
最大值为 65535 分钟。
参见:How to prevent SQL Server LocalDB auto shutdown?
如果我没记错的话,sqlexpress 自动关机也是 1 小时。
我电脑上的症状:
第一次打开会慢 10-30 秒。如果我在低于 1 秒后立即重新打开应用程序。如果我等一会儿它又变慢了
我是全新的 sql/database 应用程序,正在尝试使用 Visual Studio 2015 C# 的简单联系人管理应用程序。我正在使用 'SQL Express LocalDB'。我在 google 上读到它是用于开发目的,但微软也提到它也可以用于生产目的。
我的问题是,当我从我的开发系统试用应用程序时,应用程序第一次加载需要几秒钟,但之后每个查询都运行得很快。当我在我朋友的一个系统上尝试这个时,每次我尝试使用任何查询都需要时间。数据库只有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();
问。当应用程序处于 运行 时,我应该一直保持连接打开吗?我认为不应该建议这样做。好像应用程序崩溃数据库会损坏。
人们说 LocalDB 每隔几毫秒关闭一次连接的背景之一。那么我应该每隔几毫秒就对数据库执行一次 ping 操作吗?或者我根本不应该在生产中使用 localdb?
我想让应用程序对数据库先决条件的要求非常低。 Like LocalDB安装真的是天衣无缝。
我没有使用过SQL Server Express,Express 安装是否也像LocalDB 一样无缝,我可以在Express 中使用像LocalDB 一样的连接字符串,直接给出.mdf 文件名吗?
ddbb 的性能需要考虑很多因素,这不是一个简单的问题。对于如此少量的记录,不应该有性能问题。尝试将 ddbb 文件存储在不同于 OS 磁盘的另一个磁盘中,更好的是,将数据文件和日志文件也放在不同的磁盘中。 关于您的问题,连接必须始终关闭并在 finally 块或 using 块内正确处理。 Sql Express非常容易安装,而且还使用连接字符串,最大的不同就是它可以跨网络使用。
最终迁移到 SQLite,这比 SQLLocalDB 快得多。
localdb 有自动关闭。默认为 5 分钟。您可以将其设置为更高的值(即:12 小时)。 最大值为 65535 分钟。
参见:How to prevent SQL Server LocalDB auto shutdown?
如果我没记错的话,sqlexpress 自动关机也是 1 小时。
我电脑上的症状:
第一次打开会慢 10-30 秒。如果我在低于 1 秒后立即重新打开应用程序。如果我等一会儿它又变慢了