在使用.NET删除数据库后,MySql查询速度变慢

时间:2015-04-16 19:05:20

标签: mysql .net database c#-4.0

我似乎遇到了.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();
        }

如果我使用工作台手动删除数据库并通过注释丢弃来修改测试,那么测试的速度比它们快50倍:

Imgur Image of fast test

这都是使用NuGet.org上的NuGet包中的MySql Connector / NET。我在运行MySql 5.6.24的开发(本地)机器和使用MySql 5.5.41的最终生产机器上进行了测试。

1 个答案:

答案 0 :(得分:1)

如果有人遇到同样的事情,我想出来了。以下是我使用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();
        }

现在测试表现正常,并且因为每个测试集只丢弃一次数据库,所以在我的一些测试用例中暴露了一些问题。