MySql 使用 .NET 删除数据库后查询变慢
MySql queries slow after dropping database with .NET
.NET 中的 MySql 连接器似乎有问题。
我正在对我的数据库接口后端进行单元测试。测试的一部分是删除数据库,以便可以将整个数据库重新初始化为默认设置。这是我的测试正常情况下的样子:
Imgur Image (Since I don't have the rep yet)
掉落代码很简单:
string connStr = System.Configuration.ConfigurationManager.ConnectionStrings[APPCONFIG_SCHEMA_CONNECTION_NAME].ConnectionString;
using (MySqlConnection conn = new MySqlConnection(connStr))
using (MySqlCommand cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "DROP DATABASE IF EXISTS securitydata;";
cmd.ExecuteNonQuery();
}
如果我使用 workbench 手动删除数据库并通过注释掉删除来修改测试,测试实际上比以前快 50 倍:
这一切都是使用 NuGet.org 上提供的 NuGet 包中的 MySql Connector/NET。我已经在我的开发(本地)机器 运行 MySql 5.6.24 和使用 MySql 5.5.41.
的最终生产机器上测试了这个
我想到了以防有人 运行 遇到同样的事情。这是我的 TestInitialize:
[TestInitialize]
public void InitializeTest(TestContext c)
{
#if DEBUG
SecurityDatabase.DropDatabase();
#endif
_database = new SecurityDatabase();
}
这是我的误会。 TestInitialize
对于 每个测试 都是 运行,而不是在设置测试 class 时一次。我忘记了 ClassInitialize
属性,每个 TestClass
一次 运行s。修改后的代码为:
[ClassInitialize]
public static void InitializeClass(TestContext c)
{
#if DEBUG
SecurityDatabase.DropDatabase();
#endif
}
[TestInitialize]
public void InitializeTest()
{
_database = new SecurityDatabase();
}
现在测试运行正常,并且由于每个测试集只删除一次数据库,所以在我的一些测试用例中暴露了一些问题。
.NET 中的 MySql 连接器似乎有问题。
我正在对我的数据库接口后端进行单元测试。测试的一部分是删除数据库,以便可以将整个数据库重新初始化为默认设置。这是我的测试正常情况下的样子:
Imgur Image (Since I don't have the rep yet)
掉落代码很简单:
string connStr = System.Configuration.ConfigurationManager.ConnectionStrings[APPCONFIG_SCHEMA_CONNECTION_NAME].ConnectionString;
using (MySqlConnection conn = new MySqlConnection(connStr))
using (MySqlCommand cmd = conn.CreateCommand())
{
conn.Open();
cmd.CommandText = "DROP DATABASE IF EXISTS securitydata;";
cmd.ExecuteNonQuery();
}
如果我使用 workbench 手动删除数据库并通过注释掉删除来修改测试,测试实际上比以前快 50 倍:
这一切都是使用 NuGet.org 上提供的 NuGet 包中的 MySql Connector/NET。我已经在我的开发(本地)机器 运行 MySql 5.6.24 和使用 MySql 5.5.41.
的最终生产机器上测试了这个我想到了以防有人 运行 遇到同样的事情。这是我的 TestInitialize:
[TestInitialize]
public void InitializeTest(TestContext c)
{
#if DEBUG
SecurityDatabase.DropDatabase();
#endif
_database = new SecurityDatabase();
}
这是我的误会。 TestInitialize
对于 每个测试 都是 运行,而不是在设置测试 class 时一次。我忘记了 ClassInitialize
属性,每个 TestClass
一次 运行s。修改后的代码为:
[ClassInitialize]
public static void InitializeClass(TestContext c)
{
#if DEBUG
SecurityDatabase.DropDatabase();
#endif
}
[TestInitialize]
public void InitializeTest()
{
_database = new SecurityDatabase();
}
现在测试运行正常,并且由于每个测试集只删除一次数据库,所以在我的一些测试用例中暴露了一些问题。