I recently learned как использовать Microsoft.VisualBasic.FileIO.TextFieldParser
для анализа ввода текста. В приведенном примере для меня, TextFieldParser
вызываются с помощью ключевого слова using
Как мы можем различать управляемые и неуправляемые ресурсы в C#? Является ли TextFieldParser неуправляемым?
using (var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(new StringReader(str)))
Хотя после somefurtherresearches, я заметил, что практика использования using
ключевого слова для TextFieldParser
не является универсальной.
Насколько я понимаю, .Net
Рамка имеет как управляемый, так и неуправляемый ресурс. И когда мы используем неуправляемый ресурс, мы должны worry about утечки памяти, и поэтому мы должны позаботиться об утилизации неуправляемого ресурса, который мы используем. Один из лучших способов сделать это - положить их на using
контекст.
Все это заставляет меня задавать два вопроса в моем сознании, один конкретный и один общий. Вот мои вопросы:
- Особенности: Действительно ли TextFieldParser управляется или неуправляем?
- Общее: Есть ли определенный путь для нас, чтобы узнать, является ли ресурс управляемый или неуправляемый (например, глядя на
X
вещи в классе, или такие, так, или даже проверить что-то из MSDN - если должно быть проверили - сделают). Мне рассказали некоторые рекомендации по моему короткому опыту программирования, например: (i) большинство классов.Net
управляются, (ii) классы System.Drawing имеют некоторые неуправляемые ресурсы, (iii) остерегайтесь всех классов базы данных, сети и COM, потому что они, как правило, неуправляемы и т. д., и список продолжается, и я продолжаю добавлять его до сих пор. Но интересно, есть ли какой-либо определенный способ узнать это?
Я был бы очень признателен, если бы более опытные могли помочь мне в этом вопросе.
Не согласны ли вы более подробно разъяснить, что вы объясните? Означает ли это, что любой класс с 'IDisposable' неуправляем, и любой класс без' IDisposable' управляется? – Ian
@Ian Нет, я имею в виду, что неуместно, имеет ли класс неуправляемый ресурс или нет. Если класс плохо написан, он освободит свои неуправляемые ресурсы в конце концов, даже если вы не вызываете метод Dispose. С другой стороны, метод 'Dispose' может быть полностью * необходим * для управляемых ресурсов, а типичный пример - утечка памяти через обработчики событий. – Luaan
@Ian: Большинство классов, реализующих 'IDisposable', не будут напрямую владеть неуправляемым ресурсом. Однако они часто владеют другим классом, реализующим «IDisposable». Переход к этой цепочке будет длиться большую часть времени в неуправляемом ресурсе. Пример: 'YourClass' имеет поле FileStream. Класс 'FileStream' имеет поле' SafeFileHandle'. «SafeFileHandle» владеет базовым дескриптором неуправляемого файла ОС. Утилизация 'YourClass' должна утилизировать' FileStream', который дипозирует 'SafeFileHandle', который выпустит неуправляемый дескриптор файла. –