gpt4 book ai didi

使用 .NET 删除数据库后 MySql 查询变慢

转载 作者:搜寻专家 更新时间:2023-10-30 23:45:13 24 4
gpt4 key购买 nike

我似乎在使用 .NET 中的 MySql 连接器时遇到了问题。

我正在对我的数据库接口(interface)后端进行单元测试。测试的一部分是删除数据库,以便可以将整个数据库重新初始化为默认设置。这是我的测试正常情况下的样子:

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();
}

如果我使用工作台手动删除数据库并通过注释掉删除来修改测试,测试实际上比原来快 50 倍:

Imgur Image of fast test

这一切都是使用 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每个测试 运行,而不是在设置测试类时运行一次。我忘记了 ClassInitialize 属性,它对每个 TestClass 运行一次。修改后的代码为:

        [ClassInitialize]
public static void InitializeClass(TestContext c)
{
#if DEBUG
SecurityDatabase.DropDatabase();
#endif
}

[TestInitialize]
public void InitializeTest()
{
_database = new SecurityDatabase();
}

现在测试运行正常,并且由于每个测试集只删除一次数据库,因此在我的一些测试用例中暴露了一些问题。

关于使用 .NET 删除数据库后 MySql 查询变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29683816/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com