Объект очищает/выстраивает освобождение, действительно необходимое в VB6/VBA (Профессионалы/Недостатки?)

Я думаю, что запутывался с параметром "типа" в $ JQuery .post команда. После говорящий с некоторыми людьми, кажется, что тип возврата для вызова WebMethod ДОЛЖЕН быть "json". Я пытался использовать "HTML". Как только я изменил его на "json", и затем все работало как нормальный. Так, по-видимому, метод, украшенный [WebMethod], возвращает JSON только, и это - то, где мое зависание было.

спасибо за Ваших парней ответов.

8
задан Jon Seigel 16 April 2010 в 15:51
поделиться

5 ответов

Проблема, насколько я понимаю, связана с тем фактом, что VB6 (и его предшественники) уходят корнями в COM и его систему сбора мусора с подсчетом ссылок.

Представьте себе. , например, что вы объявляете ссылку на объект из сторонней библиотеки. Этот объект имеет счетчик ссылок COM, который используется как для поддержания его активности, так и для определения того, когда он должен быть уничтожен. Он не уничтожается, когда вы устанавливаете для него значение Nothing, но когда счетчик ссылок объекта достигает нуля.

Теперь не все компоненты COM были написаны на Visual Basic. Некоторые были написаны на C или C ++. Структурированная обработка исключений существует не на всех языках. Таким образом, если произошла ошибка, не гарантировалось, что счетчик ссылок на объект будет уменьшен должным образом, а COM-объекты, как известно, оставались дольше, чем предполагалось. По сути, это не было проблемой для Visual Basic. Это была проблема с COM. (И это, как вы могли заметить, почему .NET не использует подсчет ссылок.)

Вот почему разработчики Visual Basic стали одержимы освобождением ссылок на объекты перед выходом из подпрограмм. Вы просто не знаете, какой компонент, который вы выделяете, создает под капотом. Но когда вы отпускаете ссылку на нее, вы по крайней мере освобождаете счетчик ссылок на нее. Это стало почти религиозной мантрой. Объявить, использовать, отпустить. Это был способ работы COM.

Конечно, Visual Basic может быть лучше или быстрее при разыменовании переменных, которые я объявил в стеке. Но, черт возьми, я хочу, чтобы было ВИДНО, что эти объекты были освобождены. Небольшая уверенность имеет большое значение, когда вы пытаетесь отследить утечку памяти.

Проблема с Visual Basic как таковая. Это была проблема с COM. (И это, как вы могли заметить, почему .NET не использует подсчет ссылок.)

Вот почему разработчики Visual Basic стали одержимы освобождением ссылок на объекты перед выходом из подпрограмм. Вы просто не знаете, какой компонент, который вы выделяете, создает под капотом. Но когда вы отпускаете ссылку на нее, вы по крайней мере освобождаете счетчик ссылок на нее. Это стало почти религиозной мантрой. Объявить, использовать, отпустить. Это был способ работы COM.

Конечно, Visual Basic может быть лучше или быстрее при разыменовании переменных, которые я объявил в стеке. Но, черт возьми, я хочу, чтобы было ВИДНО, что эти объекты были освобождены. Небольшая уверенность имеет большое значение, когда вы пытаетесь отследить утечку памяти.

Проблема с Visual Basic как таковая. Это была проблема с COM. (И это, как вы могли заметить, почему .NET не использует подсчет ссылок.)

Вот почему разработчики Visual Basic стали одержимы освобождением ссылок на объекты перед выходом из подпрограмм. Вы просто не знаете, какой компонент, который вы выделяете, создает под капотом. Но когда вы отпускаете ссылку на нее, вы по крайней мере освобождаете счетчик ссылок на нее. Это стало почти религиозной мантрой. Объявить, использовать, отпустить. Это был способ работы COM.

Конечно, Visual Basic может быть лучше или быстрее при разыменовании переменных, которые я объявил в стеке. Но, черт возьми, я хочу, чтобы было ВИДНО, что эти объекты были освобождены. Небольшая уверенность имеет большое значение, когда вы пытаетесь отследить утечку памяти.

Это была проблема с COM. (И это, как вы могли заметить, почему .NET не использует подсчет ссылок.)

Вот почему разработчики Visual Basic стали одержимы освобождением ссылок на объекты перед выходом из подпрограмм. Вы просто не знаете, какой компонент, который вы выделяете, создает под капотом. Но когда вы отпускаете ссылку на него, вы по крайней мере освобождаете счетчик ссылок на него. Это стало почти религиозной мантрой. Объявить, использовать, отпустить. Это был способ работы COM.

Конечно, Visual Basic может быть лучше или быстрее при разыменовании переменных, которые я объявил в стеке. Но, черт возьми, я хочу, чтобы было ВИДНО, что эти объекты были освобождены. Небольшая уверенность имеет большое значение, когда вы пытаетесь отследить утечку памяти.

Это была проблема с COM. (И это, как вы могли заметить, почему .NET не использует подсчет ссылок.)

Вот почему разработчики Visual Basic стали одержимы освобождением ссылок на объекты перед выходом из подпрограмм. Вы просто не знаете, какой компонент, который вы выделяете, создает под капотом. Но когда вы отпускаете ссылку на нее, вы по крайней мере освобождаете счетчик ссылок на нее. Это стало почти религиозной мантрой. Объявить, использовать, отпустить. Это был способ работы COM.

Конечно, Visual Basic может быть лучше или быстрее при разыменовании переменных, которые я объявил в стеке. Но, черт возьми, я хочу, чтобы было ВИДНО, что эти объекты были освобождены. Небольшая уверенность имеет большое значение, когда вы пытаетесь отследить утечку памяти.

)

Вот почему разработчики Visual Basic стали одержимы освобождением объектных ссылок до выхода из подпрограмм. Вы просто не знаете, какой компонент, который вы выделяете, создает под капотом. Но когда вы отпускаете ссылку на него, вы по крайней мере освобождаете счетчик ссылок на него. Это стало почти религиозной мантрой. Объявить, использовать, отпустить. Это был способ работы COM.

Конечно, Visual Basic может быть лучше или быстрее при разыменовании переменных, которые я объявил в стеке. Но, черт возьми, я хочу, чтобы было ВИДНО, что эти объекты были освобождены. Небольшая уверенность имеет большое значение, когда вы пытаетесь отследить утечку памяти.

)

Вот почему разработчики Visual Basic стали одержимы освобождением объектных ссылок до выхода из подпрограмм. Вы просто не знаете, какой компонент, который вы выделяете, создает под капотом. Но когда вы отпускаете ссылку на нее, вы по крайней мере освобождаете счетчик ссылок на нее. Это стало почти религиозной мантрой. Объявить, использовать, отпустить. Это был способ работы COM.

Конечно, Visual Basic может быть лучше или быстрее при разыменовании переменных, которые я объявил в стеке. Но, черт возьми, я хочу, чтобы было ВИДНО, что эти объекты были освобождены. Небольшая уверенность имеет большое значение, когда вы пытаетесь отследить утечку памяти.

перераспределение создается под капотом. Но когда вы отпускаете ссылку на него, вы по крайней мере освобождаете счетчик ссылок на него. Это стало почти религиозной мантрой. Объявить, использовать, отпустить. Это был способ работы COM.

Конечно, Visual Basic может быть лучше или быстрее при разыменовании переменных, которые я объявил в стеке. Но, черт возьми, я хочу, чтобы было ВИДНО, что эти объекты были освобождены. Небольшая уверенность имеет большое значение, когда вы пытаетесь отследить утечку памяти.

перераспределение создается под капотом. Но когда вы отпускаете ссылку на нее, вы по крайней мере освобождаете счетчик ссылок на нее. Это стало почти религиозной мантрой. Объявить, использовать, отпустить. Это был способ работы COM.

Конечно, Visual Basic может быть лучше или быстрее при разыменовании переменных, которые я объявил в стеке. Но, черт возьми, я хочу, чтобы было ВИДНО, что эти объекты были освобождены. Небольшая уверенность имеет большое значение, когда вы пытаетесь отследить утечку памяти.

Но, черт возьми, я хочу, чтобы было ВИДНО, что эти объекты были освобождены. Небольшая уверенность имеет большое значение, когда вы пытаетесь отследить утечку памяти.

Но, черт возьми, я хочу, чтобы было ВИДНО, что эти объекты были освобождены. Небольшая уверенность имеет большое значение, когда вы пытаетесь отследить утечку памяти.

4
ответ дан 5 December 2019 в 09:26
поделиться

Мэтт Керленд, автор Advanced Visual Basic 6 , который знает о Visual Basic больше, чем большинство из нас когда-либо узнает, считает, что это напрасная трата усилий. Рассмотрим эту цитату (стр. 110) о DAO, библиотеке доступа к данным COM, которая в первую очередь нацелена на ядро ​​СУБД Access:

еще один пример плохого кода удаления. В DAO есть методы Close, которые должны быть называется в правильном порядке, и объекты должны быть освобождены в правильный порядок также (Recordset перед базой данных, например). Эта поведение одной плохой объектной модели привело к заблуждению, что утечка VB память, если вы явно не установили все локальные переменные к нулю в конец функции. Это совершенно ложное представление в хорошо продуманная объектная модель. VB может очистить переменные быстрее в конце Подстрока, чем вы можете из кода, и он проверяет переменные, даже если вы явным образом освободите свои ссылки. Любые ваши усилия будут дублироваться.

14
ответ дан 5 December 2019 в 09:26
поделиться

Вы читали эту веб-страницу Aivosto (от создателей Project Analyzer)?

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

Другими словами, вам не нужно беспокоиться об очистке обычных нестатических локальных переменных.

2
ответ дан 5 December 2019 в 09:26
поделиться

I always do it for good practice, you never know what an exception might do if you fall in one and your objects are not deallocated. You should relase them in finally statements and ensure they are not using any memory otherwise you may run into a memory leak.

I had an issue inside of a simple time off tracker system where the server kept on crashing randomly, it took weeks to determine it was a memory leak of an object that was supposed to self destruct on its own. My code was being thrown into an exception and never cleaned up after itself causing the server (the actual web site not the entire server) to go down.

0
ответ дан 5 December 2019 в 09:26
поделиться

Yes, set all objects to Nothing and clean up as much as you can. VB6 is notorious for having memory leaks when not cleaning up your stuff. Garbage collection was sub-par in VB6/VBA.

-2
ответ дан 5 December 2019 в 09:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: