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 倍:

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

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

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

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