- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
using (var stream = File.Open(inFile, FileMode.Open))
using (var reader = new StreamReader(stream))
using (var csvReader = new CsvReader(reader, new Configuration
{
HeaderValidated = HeaderValidated,
MissingFieldFound = null,
PrepareHeaderForMatch = header =>
CultureInfo.CurrentCulture.TextInfo.ToTitleCase(header)
}))
using (var outStream = File.Open(outFile, FileMode.CreateNew, FileAccess.Write, FileShare.Read))
using (var writer = new StreamWriter(outStream))
using (var csvWriter = new CsvWriter(writer))
(разве что в самом языке, %username%, - в плюсах можно было бы просто завести локальную переменную, а тут нужно не забыть using - напишешь просто new и будет непонятное поведение...)
GC собирает свой урожай глупости: приходится платить за право не думать про управление памятью
C++:
C#:
ЗАТО НЕТ ЭТИХ ДУРАЦКИХ ЗВЕЗДОЧЕК А ТО УКАЗАТЕЛИ ЭТО СЛОЖНА Я ИХ НЕ ПОНИМАЮ
Объект-то разрушен будет, а ресурсы не освободит, если это не происходит в деструкторе, а нужно, например, вызвать метод вроде Dispose у IDisposable. Тут речь не про GC, он в любом случае все соберет, а про управление ресурсами.
Она может кончиться через 5 лет или через 200 лет. Десктрутор может не вызваться никогда
Там вроде по таймеру GC запускается как раз для таких случаев.
Из-за исключений в крестах сложно контролить вызов всех этих close() — заебёшься try расставлять да руками каскадить для полей. Поэтому все вменяемые классы соблюдают RAII и в десктрукторе освобождают ресурсы.
А вот в джаве и шарпе до сих пор руками солнце закатывают (using спасает далеко не во всех случаях). Плата за недетерминированность GC.
Просвятишь?
Ну GC таки крут -- для других объектов этот dispose дёргать не надо. Да и мелкие временные объекты быстро зачищает.
Но вот невозможность быстро и гарантированно что-то очистить действительно напрягает и заставляет делать такие костыли как IDisposable. Это не только .NEt, я и в проектах на Java такое видал
Вы там как, односвязные списки без переполнения стека уже научились освобождать?
На самом деле мне нужно было писать зеленым, потому что у меня нет strong opinion на этот счет
http://govnokod.ru/19104
В плюсах аналогичную проблему легко сделать явно: Если сделать длинный-длинный (зависит от размера стека, у нас в проде это несколько килобайт) список, то деструктор порвёт стек.
Страйкир получает все коменты себе на почту? Или это адрес dm_fomenok'а? Или это адрес ОПа?
>>>"The following From address failed: [email protected] "
>>>"From address"
>>>"From"
>>>"From"
>>>"From"
>>>"From"
>>>"From"
Может, он любит обмазываться свежими комментами и читать?