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

标签 mysql .net database c#-4.0

我似乎在使用 .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/

相关文章:

java - 如何将 MySQL 查询结果映射到 Java 对象?

mysql - 查询以显示所有支持的列数据类型

.net - 推荐参数顺序

database - 在循环内部或外部提交更好?

database - Lucidchart 可以制作增强型 ER 图(EERD)吗?如果是,那么如何建模父类(super class)型、子类型和继承?

PHP 数据库类

php - 插入和更新到多个表,MySQL

c# - 控制台颜色背景颜色不变

c# - Base32解码

sql - 数据库 : advantages of relations