|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Всем привет. Некоторое время пользуюсь вот такой конструкцией без явного создания объекта через оператор with Код: vbnet 1. 2. 3. 4. 5. 6. 7.
По идее, с оператором With объект создаётся, а уничтожается должен в конце блока оператором End With.... Вопрос, а нужно ли его ещё закрывать перед этим командой Код: vbnet 1.
кто знает ? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2020, 17:22 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
melihron Некоторое время пользуюсь вот такой конструкцией без явного создания объекта через оператор with melihron а нужно ли его ещё закрывать перед этим командой ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2020, 17:49 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Панург melihron Некоторое время пользуюсь вот такой конструкцией без явного создания объекта через оператор with а где здесь явное создание объекта типа Код: vbnet 1. 2.
? В Си Шарпе по крайней мере так - неявное создание - закрытие и освобождение памяти автоматом в конце блока Панург melihron а нужно ли его ещё закрывать перед этим командой ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2020, 17:59 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
... ИМХО, не стоит тащить идеологию одного ЯП в монастырь другого... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2020, 19:32 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
melihron По идее, с оператором With объект создаётся, а уничтожается должен в конце блока оператором End With.... melihron нужно ли его ещё закрывать перед этим командой ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2020, 20:46 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
melihron В Си Шарпе по крайней мере так - неявное создание - закрытие и освобождение памяти автоматом в конце блока ... |
|||
:
Нравится:
Не нравится:
|
|||
17.06.2020, 20:50 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Akina, м? о чём вы ? в шарпе я имею ввиду конструкцию using... например: Код: c# 1. 2. 3. 4.
неявно создаётся переменная cmd класса SqlCommand, выполняется инструкция в фигурных скобках и .... и собственно всё... переменная уничтожается.... очень удобно... сорри за офтоп на другом языке ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2020, 00:01 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
melihron неявно создаётся переменная cmd класса SqlCommand В VBA у переменных тоже есть области видимости. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2020, 04:43 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
melihron неявно создаётся переменная cmd класса SqlCommand, выполняется инструкция в фигурных скобках и .... и собственно всё... переменная уничтожается.... очень удобно... Во-первых, явно - у неё даже имя есть (в отличие от VB-кода - вот там как раз неявно, и имени нет). Во-вторых, уничтожение переменной не означает разрушения объекта. Я не зря упомянул именно эксель - его хост-процесс выгружается? точно? проверьте... особенно случай, когда две копии программы параллельно и одновременно формируют себе хост-процесс показанным методом - их загружается один или два? и потом правильно ли выполняется, если вообще выполняется, выгрузка? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2020, 07:20 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
А вот в такой конструкции Close нужен ? Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.06.2020, 18:20 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
melihron, опасения, что надо пользоваЦЦа явным Close, проистекают из (старых) грехов (старого) DAO. Вот тема для курения, всё, что нужно, там, ИМХО, сказали. Читать до конца. Совсем до конца (он может показаЦЦа несколько неожиданным). Если есть желание разобраЦЦа, конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 02:01 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
melihron Всем привет. Некоторое время пользуюсь вот такой конструкцией без явного создания объекта через оператор with Код: vbnet 1. 2. 3. 4. 5. 6. 7.
По идее, с оператором With объект создаётся, а уничтожается должен в конце блока оператором End With.... Вопрос, а нужно ли его ещё закрывать перед этим командой Код: vbnet 1.
кто знает ? Проверь адрес ячейки памяти, зарезервированный под обьектную переменную твою внутри блока with и вне блока with и получишь ответ, что гадать то) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 13:43 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Сергей Лалов Проверь адрес ячейки памяти, зарезервированный под обьектную переменную твою внутри блока with и вне блока with и получишь ответ, что гадать то) Покажите пожалуйста как? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 15:33 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
ROI, В VBA есть несколько функций, которые очень редко используют при работе в VBA. На наших русскоязычных форумах имею в виду . Вот они: VarPtr - возвращает адрес переменной VarPtrArray - возвращает адрес массива VarPtrStringArray - возвращает адрес строки массива StrPtr - возвращает адрес строкового буфера UNICODE ObjPtr - возвращает указатель на интерфейс, на который ссылается переменная объекта Давайте на примере рекордсета сразу и покажу: Код: vbnet 1. 2. 3. 4. 5. 6.
Если по примеру выше: -когда рекордсет открыт - выводится адрес (число) -когда рекордсет закрыт (rs.close)- выводится этот же адрес (число) - рекордсет закрыт, но еще занимает память -И только когда мы уничтожаем его Код: vbnet 1.
MsgBox выводит 0 Функции достаточно интересные, недокументированные, на нашем форуме их не видал. Берите на здоровье) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 19:46 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Сергей Лалов, Ишь тыыыы... спасибо, добрый человек... будем посмотреть... я думал на VBA подобных инструкций нету... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.06.2020, 22:44 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Сергей Лалов, Спасибо но довольно всё не однозначно! https://www.sql.ru/forum/799937-2/obyasnite-raznicu-mezhdu-me-form-recordsource-i-me-recordsource ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 05:53 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Сергей Лалов VarPtrStringArray - возвращает адрес строки массива ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 06:31 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Сергей Лалов VarPtrStringArray - возвращает адрес строки массива ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 06:32 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Сергей Лалов Давайте на примере рекордсета сразу и покажу: ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 06:35 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Панург, Что хочешь, то и пихай) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 09:56 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Сергей Лалов, ээмм... а чё-то я не пойму, с какого боку прикрутить ObjPtr - возвращает указатель на интерфейс, на который ссылается переменная объекта если переменной то нету... Если объектная переменная есть, то Есть, чего проверять.... а когда её нету ? Код: vbnet 1. 2. 3. 4.
Допустим мы получили адрес возвращаемых полей внутри блока With.... а чего потом с ними делать вне блока With ? ..... переменных то нету.... : ) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 10:37 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Сергей Лалов Что хочешь, то и пихай) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 10:40 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
melihron, Ты не можешь в блоке with в таком контексте обратиться к самому объекту. Только к его свойствам к сожалению. Я не смог, именно с этим экземпляром не прокатывает. Панург, Остаётся поверить майкрософту на слово, что внутри блока with происходит уничтожение ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 11:00 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
хотя.. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 11:09 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2. 3. 4. 5. 6.
Вот здесь после присвоения, область видимости рекордсета простирается и за пределы блока With. И он жив. Но это потому что я объявил его в самом теле With. Хитрый вопрос. Если убрать Set , то тоже жив. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 11:15 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
melihron, В последнем примере уже появились переменные) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 11:25 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
В общем нифига рекордсет не уничтожается. И существует за пределами блока With. Поэтому по теме топика нужно выделять его отдельно, закрывать и грохать отдельно. Надеюсь это и было главным вопросом) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 11:47 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Сергей Лалов Остаётся поверить майкрософту на слово, что внутри блока with происходит уничтожение ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 11:52 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Сергей Лалов В общем нифига рекордсет не уничтожается. И существует за пределами блока With. Поэтому по теме топика нужно выделять его отдельно, закрывать и грохать отдельно. Надеюсь это и было главным вопросом) А с какого перепугу он rs должен уничтожиться? Если существует хоть одна ссылка на объект.(это объектная переменная rs). ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 12:03 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Сергей Лалов Код: vbnet 1. 2. 3. 4. 5. 6.
Вот здесь после присвоения, область видимости рекордсета простирается и за пределы блока With. И он жив. Но это потому что я объявил его в самом теле With. Хитрый вопрос. Если убрать Set , то тоже жив. ну тут естессьтно рекордсет не уничтожится, поскольку он присвоен переменной, область видимости которой вне блока With... Это как у индейцев Навахо штоли... "человек жив до тех пор, пока жив последний помнящий о нём"..... так и тут... : ) Вот у других языков высокого уровня, как си шарп, джава, специально созданы и описаны так называемые сборщики мусора, которые работают по своему расписанию и алгоритму... благодаря которым точно можно быть уверенным, что незакрытый объект уничтожится через какое-то время, если до конца работы процедуры к нему не будет обращений, и утечки памяти не будет... а здесь ... хрен знает... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 12:03 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
melihron ... а здесь ... хрен знает... Выделяй его отдельно из Dbengine как на примере чуть выше, закрывай и уничтожай. Потому что рекордсет прекрасно себя чувствует и живет после блока With. В качестве объектной переменной ссылочного типа. Потестили,убедились, приняли решение, сделали,как то так)) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 12:16 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
melihron Вот у других языков высокого уровня, как си melihron специально созданы и описаны так называемые сборщики мусора, которые работают по своему расписанию и алгоритму... melihron благодаря которым точно можно быть уверенным, что незакрытый объект уничтожится через какое-то время Ну Ну у Си всё ручками батенька ручками. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 12:23 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Да и на шарпее с джавой не все гладко со сборщиками мусора. ТС с потоками видимо мало общался в них. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 12:26 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
ROI, Вы правы, но ссылка на объект существует даже и при With dbEngine(0)(0). OpenRecordset() Воот если бы в vba можно было написать как в том же шарпе или vb типа такого With New DbEngine(0)(0).openRecordset() То можно было бы сказать что все схлопывается на end with. А тут фиг знает. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 12:48 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Сергей Лалов ROI, Вы правы, но ссылка на объект существует даже и при With dbEngine(0)(0). OpenRecordset() Воот если бы в vba можно было написать как в том же шарпе или vb типа такого With New DbEngine(0)(0).openRecordset() То можно было бы сказать что все схлопывается на end with. А тут фиг знает. Да ни какого фига. Как только вы выйдете за пределы процедуры всё схлопнется, а зачем вам эти извращения с with? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 13:10 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
ROI, Да интересный вопрос у ТС, вот реально, как проверить то, что все что написано в сигнатуре / объявлении With схлопнулось в конце блока? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 13:15 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Сергей Лалов ..., как проверить ... Не?: (обработчик ошибок специально не добавлял) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.06.2020, 13:29 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Predeclared Сергей Лалов ..., как проверить ... Не?: (обработчик ошибок специально не добавлял) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
также Recordsets.Count показывает ноль после такой конструкции: Код: vbnet 1.
ну что... вроде тогда похоже, что действительно, после выхода из области видимости, объектные переменные освобождают занятую ими память... надеюсь этого хватит) и смело можно забить на закрытие объекта внутри блока With. Нюанс только один... если рекордсет объявлять через CurrentDB (вместо DBEngine(0)(0)), то Recordsets.Count везде показывает ноль... и обратиться к рекордсету ни через CurrentDb.Recordsets(strName), ни через DBEngine(0)(0).Recordsets(strName) не получается... странно, не понятно... но разбираться в этом уже чё-то нет желания)... CurrentDB - это вроде как ссылка на DBEngine(0)(0)... вроде... но если через неё работать, я заметил, что скорость у ней меньше, а глюков больше... поэтому стараюсь с ней не связываться... Благодарю всех за помощь и участие : ) много нового узнал... тема не закрыта, если есть желание что-то по ней обсудить и поделиться опытом, всегда пажалста... : ) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2020, 15:24 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Любителям порасшибать лоб самостоятельно и прочим нечитателям посвящаеЦЦа. БерёЦЦа библиотека типов или аналогичная, содержащая описание интерфейса IUnknown. ПишеЦЦа функция: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
, тестовый класс Class1: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
, тестовые процедуры: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51.
Тесты запускаюЦЦа, результаты в отладочном окне анализируюЦЦа поодиночке и в группе, возникает непреодолимое желание прочитать хотя бы несколько первых глав у Роджерсона. Хотя последнее вряд ли. Наслаждайтесь! ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2020, 19:29 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
Predeclared, Затестил, да, спс, работает. Из коллекции workspace (0) databases(0) он исчезает. По всей видимости и уничтожается. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.06.2020, 23:59 |
|
Оператор with. Нужно ли в нём закрывать созданный в нём объект?
|
|||
---|---|---|---|
#18+
ЦЦа, Знакомый акцент, встречал в топиках 15 летней давности. С Бенедиктом не общаетесь случайно? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.06.2020, 00:03 |
|
|
start [/forum/topic.php?all=1&fid=45&tid=1610040]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
168ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
others: | 10ms |
total: | 292ms |
0 / 0 |