Управление памятью неуправляемых объектов - PullRequest
0 голосов
/ 16 сентября 2011

У меня есть один запрос относительно освобождения неуправляемых объектов.Поскольку неуправляемые объекты не находятся под непосредственным контролем CLR, поэтому CLR не может выпустить его напрямую, и для этого мы вызываем команду dispose, но если мы не использовали команду dispose в нашем приложении для этого неуправляемого объекта, то как освободится ресурс, занимаемый этими объектами,

НапримерЕсли в коде C # я использую объекты подключения как

try
{
    string strConnectionString = "";
    strConnectionString = "Server=FTSPROD\\FTS_PROD;Database=tdps_uat;User ID=txnapp;password=txnapp;Min Pool Size=5;Max Pool Size=10000;";
    for (int i = 0; i < 10000; i++)
    {              
        SqlConnection cnUpdateTransaction;                    
        cnUpdateTransaction = new SqlConnection(strConnectionString);
        cnUpdateTransaction.Open();
        cnUpdateTransaction.
        //cnUpdateTransaction.Close();
    }
}
catch (Exception Ex)
{

}

Здесь я открываю 10000 экземпляров объектов подключения и просто оставляю их для сборки мусора.Теперь, когда они являются неуправляемыми объектами, и я не вызываю close или утилизирую, наконец, как эти объекты будут освобождены.Будет ли операционная система что-то делать для этого и когда.Пожалуйста, поделитесь ссылкой на документ по этой проблеме.

1 Ответ

0 голосов
/ 17 сентября 2011

При реализации IDisposable, когда у класса есть неуправляемые ресурсы, вы должны реализовать Finalizer, который вызывает метод Dispose. Таким образом, если пользователь класса не сможет вызвать Dispose, неуправляемые ресурсы будут (в конечном итоге) освобождены при запуске GC. См. Реализация IDisposable правильно для хорошего примера.

Если объект содержит ссылки на неуправляемые ресурсы и не содержит финализатор и Dipose не вызывается, то эта память не будет возвращаться автоматически. В основном, есть утечка памяти. Память не будет восстановлена, пока процесс не будет остановлен. См. Определение и предотвращение утечек памяти в управляемом коде для некоторых интересных чтений.

...