public void ResourcesReleasabilityTest(int changesCount) { using (var sqlConnection = new SqlConnection(TEST_CONNECTION_STRING)) { sqlConnection.Open(); int sqlConversationEndpointsCount = sqlConnection.GetUnclosedConversationEndpointsCount(); int sqlConversationGroupsCount = sqlConnection.GetConversationGroupsCount(); int sqlServiceQueuesCount = sqlConnection.GetServiceQueuesCount(); int sqlServicesCount = sqlConnection.GetServicesCount(); NotificationTest(changesCount, false); // Microsoft SqlDependency REMOVES queue and service after use. Assert.AreEqual(sqlServicesCount, sqlConnection.GetServicesCount()); Assert.AreEqual( sqlServiceQueuesCount, sqlConnection.GetServiceQueuesCount()); // Microsoft SqlDependency KEEPS conversation group and endpoint in DB after use. // This behavior leads to GIANT memory leaks in SQL Server. Assert.AreNotEqual( sqlConversationGroupsCount, sqlConnection.GetConversationGroupsCount()); Assert.AreNotEqual( sqlConversationEndpointsCount, sqlConnection.GetUnclosedConversationEndpointsCount()); } }
public void ResourcesReleasabilityTest(int changesCount) { using (var sqlConnection = new SqlConnection(ADMIN_TEST_CONNECTION_STRING)) { sqlConnection.Open(); int sqlConversationEndpointsCount = sqlConnection.GetUnclosedConversationEndpointsCount(); int sqlConversationGroupsCount = sqlConnection.GetConversationGroupsCount(); int sqlServiceQueuesCount = sqlConnection.GetServiceQueuesCount(); int sqlServicesCount = sqlConnection.GetServicesCount(); int sqlTriggersCount = sqlConnection.GetTriggersCount(); int sqlProceduresCount = sqlConnection.GetProceduresCount(); using (SqlDependencyEx sqlDependency = new SqlDependencyEx( TEST_CONNECTION_STRING, TEST_DATABASE_NAME, TEST_TABLE_NAME, "temp")) { sqlDependency.Start(); // Make sure we've created one queue, sevice, trigger and two procedures. Assert.AreEqual(sqlServicesCount + 1, sqlConnection.GetServicesCount()); Assert.AreEqual( sqlServiceQueuesCount + 1, sqlConnection.GetServiceQueuesCount()); Assert.AreEqual(sqlTriggersCount + 1, sqlConnection.GetTriggersCount()); Assert.AreEqual(sqlProceduresCount + 2, sqlConnection.GetProceduresCount()); MakeTableInsertDeleteChanges(changesCount); // Wait a little bit to process all changes. Thread.Sleep(1000); } // Make sure we've released all resources. Assert.AreEqual(sqlServicesCount, sqlConnection.GetServicesCount()); Assert.AreEqual( sqlConversationGroupsCount, sqlConnection.GetConversationGroupsCount()); Assert.AreEqual( sqlServiceQueuesCount, sqlConnection.GetServiceQueuesCount()); Assert.AreEqual( sqlConversationEndpointsCount, sqlConnection.GetUnclosedConversationEndpointsCount()); Assert.AreEqual(sqlTriggersCount, sqlConnection.GetTriggersCount()); Assert.AreEqual(sqlProceduresCount, sqlConnection.GetProceduresCount()); } }