Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
hpa
0 / 0 / 0
Регистрация: 03.05.2013
Сообщений: 3
1

MySql Net Connector утечка памяти

03.05.2013, 09:47. Просмотров 779. Ответов 6
Метки нет (Все метки)

В своей программе использую следующий код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
public static class ParserHelper
    {
        private static MySqlConnection con;
 
        private static MySqlCommand SaveCrdCmd;
 
        static ParserHelper() 
        {
            con = new MySqlConnection(Service1.ConStr);
            SaveCrdCmd = new MySqlCommand("Insert", con);
            SaveCrdCmd.CommandType = System.Data.CommandType.StoredProcedure;
            SaveCrdCmd.Parameters.Add("@Param", MySqlDbType.UInt64);
            ...
            SaveCrdCmd.Parameters.Add("@id", MySqlDbType.UInt64).Direction = System.Data.ParameterDirection.Output;
            SaveCrdCmd.Connection.Open();
        }
        
 
        public static bool SavePoint(UInt64 param1 ....)
        {
            bool result = true;
            lock (SaveCrdCmd)
            {
                SaveCrdCmd.Parameters["@Param"].Value = param1;
                ...
                try
                {
                    SaveCrdCmd.ExecuteNonQuery();
                //    UInt64 id = (UInt64)SaveCrdCmd.Parameters["@id"].Value;
                    
                }
                catch (MySqlException ex)
                {
                    if (ex.Number != 1062)
                    {
                        result = false;
                        Service1.Evlog.WriteEntry(String.Format("Ошибка сохранения данных. {1} {0}", ex.Message, ex.Number), System.Diagnostics.EventLogEntryType.Error);
                        if (ex.Number == 1042)
                        {
                            System.ServiceProcess.ServiceController c = new System.ServiceProcess.ServiceController("MyService");
                            c.Stop();
                        }
                    }
                }
                catch (Exception ex)
                {
                    result = false;
                    Service1.Evlog.WriteEntry(String.Format("Ошибка сохранения данных. {0}", ex.Message), System.Diagnostics.EventLogEntryType.Error);
                }
            }
            return result;
        }
    }
После суток активного использования SavePoint, наблюдается значительная утечка памяти (Скриншот dot Trace Memory в вложении)..
Как я понимаю, при вызове ExecuteNonQuery, connector пытается обработать несуществующую транзакцию и в результате у меня куча "не собранных" объектов SaveIUnknown.
Подскажите, как с этим бороться?
0
Миниатюры
MySql Net Connector утечка памяти  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2013, 09:47
Ответы с готовыми решениями:

Подключение mysql connector NET 6.7.4 к MS 2012
Пытаюсь подключить MySql-connector .Net к VS 2012 ulti. Создал ссылку на mysql.data.dll. Из кода...

ADO.NET & MySQL Connector
Объясните мне пожалуйста подробнее, что такое ADO.NET? В msdn описание прочитал, но так и не понял...

MySql Connector для .NET Framework 2?
Добрый вечер. Существует mysql connector для 2 .NET? На офф сайте есть версия Connector / Net...

Подключение к другому компьютеру по локальной сети через сервер MySQL и NET Connector
Доброго времени суток. Использую С#, сервер MySQL и библиотеку NET Connector. Комп 1. Ip...

Mysql connector
Как проверить установлен ли Mysql connector на компьютер или нет?

6
turbanoff
Эксперт Java
4024 / 3759 / 742
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
06.05.2013, 08:02 2
Какую версию коннектора используете?
Вроде эту проблему пофиксили - http://bugs.mysql.com/bug.php?id=36027 Попробуйте обновиться.
0
hpa
0 / 0 / 0
Регистрация: 03.05.2013
Сообщений: 3
06.05.2013, 08:54  [ТС] 3
6.6.5.0 Видимо не профиксили.. Спасибо за ссылку. Попробую убрать output параметры.
0
turbanoff
Эксперт Java
4024 / 3759 / 742
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
06.05.2013, 10:08 4
Можно, например, попробовать пересоздавать MySQLCommand каждые несколько вызовов (на старом вызывать Dispose)
1
Learx
1046 / 853 / 194
Регистрация: 31.03.2010
Сообщений: 2,490
07.05.2013, 14:37 5
Используйте для получения значения ключа @@IDENTITY:

C#
1
2
3
4
5
6
7
8
9
SaveCrdCmd = new MySqlCommand("Insert  ... ; Select @@IDENTITY;", con);
 
......
 
try
{
     UInt64 id = (UInt64) SaveCrdCmd.ExecuteScalar();         
    //поле-автоинкримент должно быть bigint !!!          
}
0
hpa
0 / 0 / 0
Регистрация: 03.05.2013
Сообщений: 3
08.05.2013, 16:47  [ТС] 6
Цитата Сообщение от Learx Посмотреть сообщение
Используйте для получения значения ключа @@IDENTITY:

C#
1
2
3
4
5
6
7
8
9
SaveCrdCmd = new MySqlCommand("Insert  ... ; Select @@IDENTITY;", con);
 
......
 
try
{
     UInt64 id = (UInt64) SaveCrdCmd.ExecuteScalar();         
    //поле-автоинкримент должно быть bigint !!!          
}
MySqlCommand("Insert") - у меня вызов хранимой процедуры. Мне кажется ("Insert ... ; Select @@IDENTITY;", con) с процедурой работать не будет

Добавлено через 2 минуты
Цитата Сообщение от turbanoff Посмотреть сообщение
Можно, например, попробовать пересоздавать MySQLCommand каждые несколько вызовов (на старом вызывать Dispose)
Передергивать только Command? Connection оставить статичным?
0
turbanoff
Эксперт Java
4024 / 3759 / 742
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
08.05.2013, 18:53 7
Цитата Сообщение от hpa Посмотреть сообщение
Передергивать только Command? Connection оставить статичным?
Пробуйте. Сначала только Command. Если проблема останется, то и Connection.
0
08.05.2013, 18:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.05.2013, 18:53

MySQL Connector
Использую MySQL Connector в свой программе, а она работает у других пользователей только когда...

MySql Connector + SSH
Отправляю запросы в базу данных через MySql Connector хочу защитить дание с помощью SSH....

MySql Connector ошибка при подключении
Есть проблема, использую MySql Connector но при попытке подключения пишет - "Unable to connect to...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru