Правильная работа с COM объектами в .NET

431
28 января 2017, 08:26

Работаю с Microsoft DAO 3.6 Object Library, так как он производительнее ADO.NET при работе с Access и меня интересует следующее:

  1. Имеет ли смысл присваивать null объектам, которые я больше не хочу использовать? Слышал, что .NET подсчитывает ссылки и после этого автоматически убивает объект.
  2. Достаточно ли закрыть RecordSet и т п объекты или нужно после этого вызвать один из Marshal ?
Answer 1

По первому вопросу:

Если ваша ссылка — локальная переменная, то нет, не имеет смысла. Оптимизатор .NET видит момент, когда вашему коду реально больше не нужна ссылка на объект, и может убрать его даже в середине выполнения нестатического метода этого самого объекта, если он видит, что this больше не используется.

Если же ваша ссылка — поле другого, потенциально долгоживущего объекта, то обнулять её имеет смысл, потому что компилятор не может так просто узнать, нужна ли объекту эта ссылка или нет.

Литература:

  • When does an object become available for garbage collection?
  • Construction destruction
READ ALSO
C#. Разжатие файла при помощи GZip в многопоточной среде

C#. Разжатие файла при помощи GZip в многопоточной среде

Пытаюсь разобраться как написать процесс сжатия и разжатия при помощи GZip в многопоточной среде

515
Вложить в ссылку элемент

Вложить в ссылку элемент

Как в ASPNET MVC ссылку вложить элемент, сохраняя при этом виртуальный путь?

390
Ninject не может создать обьект

Ninject не может создать обьект

При попытке создать обьект через контейнер Ninject вылетает exception : Object reference not set to an instance of an objectПодскажите, пожалуйста, в чем может быть проблема?

323