Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Web, ASP.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
adsh
0 / 0 / 0
Регистрация: 29.01.2008
Сообщений: 15
1

Обязательно ли закрывать Server.CreateObject?

29.01.2008, 02:14. Просмотров 1284. Ответов 11
Метки нет (Все метки)

Есть некий поисковый скрипт:

Код
...
Set objQuery = Server.CreateObject('ixsso.Query')
Set util = Server.CreateObject('ixsso.Util')

...

set rsQuery = objquery.createrecordset('nonsequential')
...
Обязательно ли закрывать его как:
Код
rsQuery.close
set rsQuery = nothing
set ixsso.Query = nothing
set ixsso.Util = nothing
Вроде и так нормально работает. Насколько это критично?

ЗЫ. Сам программированием никогда не занимался...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.01.2008, 02:14
Ответы с готовыми решениями:

CreateObject и Server.CreateObject - в чем разница?
Когда мы пишем на ASP, то пользуемся двумя функциями - CreateObject и...

Объект Server, ASP 0177 (0x800401F3) Сбой Server.CreateObject Недопустимый код ProgID.
Вот что пишет иис: Тип ошибки: Объект Server, ASP 0177 (0x800401F3) Сбой...

Server object error 'ASP 0177 : 800401f3' Server.CreateObject Failed /DJMusinas/lt/index.asp, line 49
Перешёл нa нoвый сервер и срaзу прoблемы пoявились... Выдaёт oшибку: Server...

Объект Server ошибка 'ASP 0177 : 800401f3' Сбой Server.CreateObject /Cmatirial.asp, line 8 Недопустимый код ProgID.
Подскажите плиз.... Пишу в асп: <% set Pdll = Server.CreateObject...

Ошибка на сайте: Server object error 'ASP 0177 : 800401f3' Server.CreateObject Failed /sutulio/_ScriptLibrary/pm.asp, line 160
Hi vot uje 2 mesyaca ne mogu reshit problemu na svoem sayte. Server object...

11
Rider
29.01.2008, 06:40 2
Насколько я слышал, можно не закрывать, IIS закроет объект сам через некоторое время (20мин?).
Однако (если это так), таким образом расходуется память - что, как рез-т, скажется на загрузке сервака и его работе.

Тебе простительно не знать, но одна из истин программирования - если что-то открыл, закрой! Поэтому, закрой объекты, от тебя не убудет.

Удачи
Sergik
29.01.2008, 09:59 3
не через 20 минут, а сразу же после выполнения страницы
parashin
0 / 0 / 0
Регистрация: 21.06.2007
Сообщений: 654
29.01.2008, 12:31 4
точно. Объекты уничтожаются после выполнения ASP сценария.
0
Rider
29.01.2008, 12:36 5
Значит меня гнусно обманули... )
Тем не менее, хорошая практика закрывать открытые объекты
adsh
0 / 0 / 0
Регистрация: 29.01.2008
Сообщений: 15
29.01.2008, 13:03  [ТС] 6
2 Rider

Хорошо. В каком конкретно месте тогда закрыть. Вот есть код от Сергея Лабутина http://prosto.pp.ru/Docum/DocumShow.asp?DocumID=238. Я его маленько отредактировал, но закрыть не получается - в зависимости от введённых данных (тип ошибки или правильный ввод) временами вылазит ошибка.

[code]

<html>
<head>
<meta http-equiv='Content-Language' content='ru'>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>
<title>Поиск по сайту</title>
<style fprolloverstyle>A:hover {color: #FF0000; text-decoration: underline}</style>
</head>
<body link='#0000FF' vlink='#800080' alink='#FF0000' bgcolor='#FFFFFF'>
<div align='center'>
<table width='95%' border=10 cellSpacing=10 cellPadding=10 borderColorDark='Blue' bgcolor='#FFFFFF'><tr><td>
<font face='Times New Poman' color='#004848' size='3'><b>

<% function Htmlencoding(s)
htmlencoding=replace(replace(replace(replace(s,'&','&amp;'),'<','&lt;'),'>','&gt;'),'''','&quot;')
end function %>

<form method='post' action='default.asp' id='form1' name='form1'>
<p align=center><font size='4'>Поиск по сайту:</font>
<p align=center><input type='text' name='qu' value='<%=htmlencoding(Request('qu'))%>' size='20'>
<input type='submit' value='Искать' name='Search' onclick='if (document.form1.qu.value=='') {alert('Что будем искать?'); return false}'>
<input type='hidden' name='page' value='1'>
</form>
<p align='center'><font size='2'>Подсказка: вы можете использовать звёздочку в конце любого неполного слова.</font>

<%
if Request('qu')<>'' then 'пользователь передал строку для поиска
'Создаем объект Query индекс-сервера и инициализируем его используя SetQueryFromURL
Set objQuery = Server.CreateObject('ixsso.Query')
Set util = Server.CreateObject('ixsso.Util')
objQuery.AllowEnumeration = TRUE
'устанавливаем системную локаль (локаль – это номер региона, по этому номеру система узнает язык, формат вывода дат и т.п.).
'Это нужно, чтобы индекс-сервер искал РУССКИЙ текст
SiteLocale = 'RU'
objQuery.LocaleID = util.ISOToLocaleID(SiteLocale)
objQuery.CATALOG='ftp' 'задаем каталог, здесь нужно задать нужный каталог
objQuery.Query='@contents ' & Request('qu') 'передаем объекту строку для поиска текста с возможностью подстановки окончания звёздочкой
objQuery.SortBy = 'HitCount[d]' 'записи нужно получить по убыванию релевантности
objQuery.MaxRecords = 1000 'максимальное число записей
objquery.columns='filename,HitCount,vpath,DocTitle,characterization' 'Зададим требуемые поля
'Откроем recordset.
on error resume next
set rsQuery = objquery.createrecordset('nonsequential')
if err.number=-2147215867 then
Response.write('<p align=center>Строка поиска содержит только игнорируемые символы.')
'Проверка на успешное создание RecordSet
'Если ввести например '*', то RecordSet не создается
'И заодно на все остальные ошибки при создании RecordSet
elseif not isObject(rsquery)
0
adsh
0 / 0 / 0
Регистрация: 29.01.2008
Сообщений: 15
29.01.2008, 13:03  [ТС] 7
2 Rider

Хорошо. В каком конкретно месте тогда закрыть. Вот есть код от Сергея Лабутина http://prosto.pp.ru/Docum/DocumShow.asp?DocumID=238. Я его маленько отредактировал, но закрыть не получается - в зависимости от введённых данных (тип ошибки или правильный ввод) временами вылазит ошибка.

[code]

<html>
<head>
<meta http-equiv='Content-Language' content='ru'>
<meta http-equiv='Content-Type' content='text/html; charset=windows-1251'>
<title>Поиск по сайту</title>
<style fprolloverstyle>A:hover {color: #FF0000; text-decoration: underline}</style>
</head>
<body link='#0000FF' vlink='#800080' alink='#FF0000' bgcolor='#FFFFFF'>
<div align='center'>
<table width='95%' border=10 cellSpacing=10 cellPadding=10 borderColorDark='Blue' bgcolor='#FFFFFF'><tr><td>
<font face='Times New Poman' color='#004848' size='3'><b>

<% function Htmlencoding(s)
htmlencoding=replace(replace(replace(replace(s,'&','&amp;'),'<','&lt;'),'>','&gt;'),'''','&quot;')
end function %>

<form method='post' action='default.asp' id='form1' name='form1'>
<p align=center><font size='4'>Поиск по сайту:</font>
<p align=center><input type='text' name='qu' value='<%=htmlencoding(Request('qu'))%>' size='20'>
<input type='submit' value='Искать' name='Search' onclick='if (document.form1.qu.value=='') {alert('Что будем искать?'); return false}'>
<input type='hidden' name='page' value='1'>
</form>
<p align='center'><font size='2'>Подсказка: вы можете использовать звёздочку в конце любого неполного слова.</font>

<%
if Request('qu')<>'' then 'пользователь передал строку для поиска
'Создаем объект Query индекс-сервера и инициализируем его используя SetQueryFromURL
Set objQuery = Server.CreateObject('ixsso.Query')
Set util = Server.CreateObject('ixsso.Util')
objQuery.AllowEnumeration = TRUE
'устанавливаем системную локаль (локаль – это номер региона, по этому номеру система узнает язык, формат вывода дат и т.п.).
'Это нужно, чтобы индекс-сервер искал РУССКИЙ текст
SiteLocale = 'RU'
objQuery.LocaleID = util.ISOToLocaleID(SiteLocale)
objQuery.CATALOG='ftp' 'задаем каталог, здесь нужно задать нужный каталог
objQuery.Query='@contents ' & Request('qu') 'передаем объекту строку для поиска текста с возможностью подстановки окончания звёздочкой
objQuery.SortBy = 'HitCount[d]' 'записи нужно получить по убыванию релевантности
objQuery.MaxRecords = 1000 'максимальное число записей
objquery.columns='filename,HitCount,vpath,DocTitle,characterization' 'Зададим требуемые поля
'Откроем recordset.
on error resume next
set rsQuery = objquery.createrecordset('nonsequential')
if err.number=-2147215867 then
Response.write('<p align=center>Строка поиска содержит только игнорируемые символы.')
'Проверка на успешное создание RecordSet
'Если ввести например '*', то RecordSet не создается
'И заодно на все остальные ошибки при создании RecordSet
elseif not isObject(rsquery)
0
Rider
29.01.2008, 13:25 8
Хе хе хе
Все достаточно просто

1. при любом условном переходе не уходим со страницы
содали объект
открыли объект
...
чего то делаем
...
закрыли объект
убили объект

2. при каком то из условных переходов уходим со страницы
содали объект
открыли объект
...
чего то делаем
if чего то then
закрыли объект
убили объект
respose.redirect|end
else
продолжаем чего то делать
end if
...
закрыли объект
убили объект

Я обычно пишу функцию, которая закрывает и убивает объекты, которую вызываю при надобности. Например такая
Код
function ShutDown
	set rs = Nothing  ' recordset object
	conn.Close        ' connection object
	set conn = Nothing
end function
Все это приходит с привычкой - работая на C/C++, Java, Delphi за такими вещами нужно следить, иначе ничего хорошего не получается.
adsh
0 / 0 / 0
Регистрация: 29.01.2008
Сообщений: 15
29.01.2008, 14:15  [ТС] 9
2 Rider

Это всё в теории так просто. В вышеприведенном примере, необходимое место закрытия получается разным в зависимости от получаемой ошибки. Там таких вариантов четыре - ошибки нет, ошибочный запрос, введены только игнорируемые данные и ничего не найдено. ИМХО - в зависимости от того, что выводится - место расположения

Код
rsQuery.closeset
rsQuery = nothingset
ixsso.Query = nothingset
ixsso.Util = nothing
будет плавать и все эти строчки нужно ставить в разные места применительно к ситуации :-(...
0
Rider
29.01.2008, 14:42 10
Ну и в чем собственно проблема? )

Вопрос как стоял? Обязательно закрывать или нет? IMHO желательно.
adsh
0 / 0 / 0
Регистрация: 29.01.2008
Сообщений: 15
29.01.2008, 15:18  [ТС] 11
2 Rider

Ясно - теория теорией, практика практикой ;-)...
0
Rider
29.01.2008, 15:23 12
Самое страшное, это ленивый программист...
Но это уже флейм...

Удачи
29.01.2008, 15:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.01.2008, 15:23

Server.CreateObject('a.b') что должно быть в a и b?
Вопрос. Подключение DLL, зарегестрированной на сервере (успешно). Пишу в ASP:...

Метод Server.CreateObject требует права использования
Такая вот проблема - пытаюсь создать объект connection - set...

error 0177 Server.CreateObject Failed Что делать?
Похоже не создаётся объект persits.upload. Не хватает библиотеки? Где взять?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru