Утечка памяти в коде c ++ / CLI - PullRequest
0 голосов
/ 10 мая 2018

Тестовое приложение:

static void Main(string[] args)
    {
        String connectionString = "DSN=DotNetUltraLightDSII; UID=user; PWD=pass";
        String query = "select * from person";

        using (OdbcConnection connection = new OdbcConnection(connectionString))
        {
            connection.Open();
            for (Int32 trial = 1; trial <= 100000; trial++)
            {
                if (0 == trial % 1000)
                {
                    Console.WriteLine("Executing trial #{0:#,0}", trial);
                    GC.Collect();
                }

                using (OdbcCommand command = new OdbcCommand(query, connection))
                {
                    using (OdbcDataReader reader = command.ExecuteReader())
                    {
                        do
                        {
                            while (reader.Read())
                            {
                                for (Int32 colIndex = 0; colIndex < reader.FieldCount; colIndex++)
                                {
                                    Object x = reader[colIndex];
                                    IDisposable d = x as IDisposable;
                                    if (null != d)
                                    {
                                        d.Dispose();
                                    }
                                    d = null;
                                    x = null;
                                }
                            }
                        } while (reader.NextResult());
                        reader.Close();
                    }
                }
            }

            connection.Close();
        }

Использование памяти Сравнение снимков кучи

Использование памяти только увеличивается со временем. Кажется, что у ULPersonTable есть сильные ручки, но я не могу сказать, что это за сильные ручки и откуда они берутся. Мы храним экземпляры этого типа внутри gcroot, но они, похоже, уничтожены. Если бы кто-то мог пролить свет на эту проблему, это было бы оценено.

Привет

1 Ответ

0 голосов
/ 14 мая 2018

Закончилось поиском проблемы. Это был указатель, который не удалялся должным образом.

...