Здравствуйте, IT, Вы писали:
IT>Давай без using. Нет его. Влияют ли скобки на время жизни объекта? С областью видимости переменной всё понятно. А как с объектом?
Нет, не влияют. Я вообще сомневаюсь, что MSIL со скобками и без них будет хоть чем-то отличаться.
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Michael7, Вы писали:
M>>GC вычистит ненужный более объект (ушедший из поля видимости). Только using для этого не обязателен, это уже я поспешил замечание сделать. using нужен был, если требовалась очистка, даже при словленном исключении, то есть, это фактически аналог try{}finally{}
IT>Давай без using. Нет его. Влияют ли скобки на время жизни объекта? С областью видимости переменной всё понятно. А как с объектом?
По идее тоже заканчивается за блоком, если только не static.
Здравствуйте, sharpcoder, Вы писали:
S>Прикинь, она идеально знает алгоритмы, структуры данных, паттерны, машинленинг и т.п.
Что, кстати, вполне вероятно. Алгоритмы не требуют знания идиомы Disposable, это чисто специфика прикладного кодера.
Но, с другой стороны, тогда бы и вопросы были другие. Предложили бы, например, на доске написать нейросеть, которая будет прогнозировать стоимость бензина по РФ в 2017 году.
Человеку, способному это сделать, тупых вопросов про using и Mutex задавать не будут.
Здравствуйте, Mishka, Вы писали:
A>>Я уверен что человек знал что такое using. Более того, я уверен что любой кто 9 лет писал на C# знает что такое using. M>Кстати, я более чем уверен, что этот конкретный человек наврал про 9 лет и вообще на C# никогда не писал. Прикинь такие тоже встречаются, не все кто в тельняшках моряки.
А бывает, что человек работал годами, но условно говоря юниором, которому серьезной работы не доверяется, а он главным образом пишет через какой-то готовый фреймворк код, в котором ошибки не критичны. Последний человек, который мне сказал, что Dispose — для очистки памяти, занимаемой объектом, работал несколько лет в создании разных приложений, с плотной работой с БД. Дальнейшие вопросы после этого выявили, что в компании был какой-то самописный ДАЛ, которым человек собственно и пользовался. А как оно там работает внутри — он так и остался без понятия.
Здравствуйте, Michael7, Вы писали:
M>Здравствуйте, IT, Вы писали:
IT>>Здравствуйте, Michael7, Вы писали:
M>>>GC вычистит ненужный более объект (ушедший из поля видимости). Только using для этого не обязателен, это уже я поспешил замечание сделать. using нужен был, если требовалась очистка, даже при словленном исключении, то есть, это фактически аналог try{}finally{}
IT>>Давай без using. Нет его. Влияют ли скобки на время жизни объекта? С областью видимости переменной всё понятно. А как с объектом?
M>По идее тоже заканчивается за блоком, если только не static.
На коленке :
{
var o = new MyClassWithFinilizer();
}
GC.Collect
GC.WaitForPendingFinilizers()
GC.Gollect
Здравствуйте, Mishka, Вы писали:
M>P.S. Вопрос 2 — что есть mutex и зачем он? Это тоже "о боже мой, вы совсем о..уели в своих банках"?
А тебя какой интересует, системный объект Винапи или его дотнет обертка? Их поведение различается, кстати.
И это все тоже чисто специфика прикладного кодера невысокого уровня.
Здравствуйте, Слава, Вы писали:
IT>>Давай без using. Нет его. Влияют ли скобки на время жизни объекта? С областью видимости переменной всё понятно. А как с объектом?
С>Нет, не влияют. Я вообще сомневаюсь, что MSIL со скобками и без них будет хоть чем-то отличаться.
Вряд ли это MSIL. Это зависит чего там компилятор нагенерирует.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, Michael7, Вы писали:
IT>>Давай без using. Нет его. Влияют ли скобки на время жизни объекта? С областью видимости переменной всё понятно. А как с объектом? M>По идее тоже заканчивается за блоком, если только не static.
Не думаю. Указатель под переменную выделяется в стеке и вряд ли он зачищается при выходе из области видимости переменной. Следовательно, объект будет существовать до момента выхода из метода.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, fmiracle, Вы писали:
F>Я не собеседую в Лондоне в большой банк, а только в РФ в небольшую компанию. И я часто спрашиваю что такое метод Dispose, для чего применяется, и уже не раз получал ответ, что он нужен для того, чтобы сборщик мусора теперь мог собрать этот объект
Меня однажды собеседовали в один небольшой немецкий банк. Собеседующих было 2, добрый и злой, как положено. Ну в общем на третий час они малость подустали( а я как раз тогда проштудировал от корки до корки Нэша по наисвежайшему C# 4.0 и прорешал все задачки из Сэджвика). И один из собеседующих, наморщив лоб, небрежно обронил — "а расскажите-ка нам, как в машинной памяти устроена ссылка на объект в .NET... ШТАААААА???? ВЫ ЭТОГО НЕ ЗНАЕТЕ И СМЕЛИ К НАМ ПРИЙТИ?!!!!...".
Даже не знаю, насколько гневную тему на каком-нибудь форуме тиснул тем вечером один из тех разгневанных программистов.
F>При этом человек может работать с C# уже несколько лет, в т.ч. с базами данных.
P.S. Да, самое смешное. Несмотря на знания Нэша и Сэджвика, кодил я тогда откровенно говенно. Опыта не хватало, умения сосредоточиться на нужном или запомнить все важное из структуры проектов в несколько сотен kloc.
Щас, правда, ситуация не особо улучшилась, зато я стал намного наглее.
Здравствуйте, StandAlone, Вы писали:
S>> она идеально знает ... паттерны ... SA> Что, кстати, вполне вероятно. Алгоритмы не требуют знания идиомы Disposable, это чисто специфика прикладного кодера.
А если не вполне вероятно, а совершенно точно, то Dispose — это паттерн.
M>{
M> var o = new MyClassWithFinilizer();
M>}
M>GC.Collect
M>GC.WaitForPendingFinilizers()
M>GC.Gollect
M>
M>Упадёт объект? Нет студии под рукой проверить
Не должен, а с чего бы? Студии тоже нет под рукой, но проверил на mono, ничего не упало. Использовал StreamReader для класса с финализатором
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Michael7, Вы писали:
IT>>>Давай без using. Нет его. Влияют ли скобки на время жизни объекта? С областью видимости переменной всё понятно. А как с объектом? M>>По идее тоже заканчивается за блоком, если только не static.
IT>Не думаю. Указатель под переменную выделяется в стеке и вряд ли он зачищается при выходе из области видимости переменной. Следовательно, объект будет существовать до момента выхода из метода.
Идентификатор, объявленный без спецификатора класса хранения static, имеет автоматическую длительность хранения, если он объявлен внутри функции. Идентификатор с автоматической длительностью хранения ("локальный идентификатор") имеет выделенную память и определенное значение только внутри блока, в котором он определен или объявлен. Автоматическому идентификатору выделяется новая память при каждом входе программы в соответствующий блок; при выходе программы из этого блока память (и значение) идентификатора освобождается. Идентификаторы, объявленные в функции без компоновки, также имеют автоматическую длительность хранения.
Естественно, на практике GC может сохранять какое-то неопределенное время память за объектом.
Здравствуйте, antropolog, Вы писали:
A>серъёзно в банках это да ( читай — пускание пыли в глаза ), но вот то что на интервью у кандидата с 9 годами опыта спрашивают про using говорит лишь о том что собеседующий вчерашний студент, понятия не имеющий что такое разработка ПО, даже если ему под сраку лет.
Объясните свою логику.
Если у кандидата 9 лет опыта, это отменяет необходимость знать, зачем нужен using?
Если да, то начиная со скольки лет опыта необязательно знать, зачем нужен цикл while?
Я бы глянул не в документацию, а декомпилированный код. По-моему там никто ссылки в стеке после выхода из блоков не зачищает.
M>Естественно, на практике GC может сохранять какое-то неопределенное время память за объектом.
Это понятно.
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, StandAlone, Вы писали:
SA>Здравствуйте, fmiracle, Вы писали:
F>>Я не собеседую в Лондоне в большой банк, а только в РФ в небольшую компанию. И я часто спрашиваю что такое метод Dispose, для чего применяется, и уже не раз получал ответ, что он нужен для того, чтобы сборщик мусора теперь мог собрать этот объект
SA>Меня однажды собеседовали в один небольшой немецкий банк. Собеседующих было 2, добрый и злой, как положено. Ну в общем на третий час они малость подустали( а я как раз тогда проштудировал от корки до корки Нэша по наисвежайшему C# 4.0 и прорешал все задачки из Сэджвика). И один из собеседующих, наморщив лоб, небрежно обронил — "а расскажите-ка нам, как в машинной памяти устроена ссылка на объект в .NET... ШТАААААА???? ВЫ ЭТОГО НЕ ЗНАЕТЕ И СМЕЛИ К НАМ ПРИЙТИ?!!!!...". SA>Даже не знаю, насколько гневную тему на каком-нибудь форуме тиснул тем вечером один из тех разгневанных программистов.
Посылать надо подальше таких работодателей!
Два с лишним часа собеседовать людей--это слишком!
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Michael7, Вы писали:
M>>Засомневался, глянул сейчас в https://msdn.microsoft.com/ru-ru/library/30k8f0kc.aspx
IT>Я бы глянул не в документацию, а декомпилированный код. По-моему там никто ссылки в стеке после выхода из блоков не зачищает.
Тут я пас, MSIL еще не изучал. В принципе, логично просто счетчик ссылок уменьшить до нуля после выхода из блока, а зачищать лишь при необходимости или по расписанию.
M>using
M>{
M> var o = new Object();
M>}
M>// здесь GC будет знать что объект свободен и его можно убрать
M>
Ну спросил бы, что будет, если using убрать. Поговорили бы, зачем нужен garbage collector. Если цель — именно нанять полезного человека, а не самоутвердиться — то надо смотреть, способен ли он понимать, что к чему, с разумным количеством подсказок. Иначе вы наймете только тех, кто целенаправленно зубрил "100 вопросов для собеседования по %TechnologyName%", что никак не коррелирует с полезностью.
Здравствуйте, Michael7, Вы писали:
M>Тут я пас, MSIL еще не изучал. В принципе, логично просто счетчик ссылок уменьшить до нуля после выхода из блока, а зачищать лишь при необходимости или по расписанию.
Какой ещё счётчик ссылок?
Если нам не помогут, то мы тоже никого не пощадим.
M>Итак, Лондон, большой банк, всё серьёзно. Встречаю соискательницу с чётким CV, 9 лет опыта С#, WPF, сервер, в общем на бумаге всё что надо. M>Вопрос: using в С# где и зачем
Это еще что...
Боб Мартин писал, что беседовал с претенденткой на серьезную программистскую должность,
которая не написала НИ ОДНОЙ программы за 6 лет обучения...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Michael7, Вы писали:
M>>Тут я пас, MSIL еще не изучал. В принципе, логично просто счетчик ссылок уменьшить до нуля после выхода из блока, а зачищать лишь при необходимости или по расписанию.
IT>Какой ещё счётчик ссылок?
Я не знаю как точно сделан GC в C#, но по идее самое простое — это завести в памяти кроме данных еще и счетчик ссылок на эти данные. Каждый новый объект, ссылающийся на них увеличивает счетчик. И наоборот счетчик уменьшается с ликвидацией объекта.