| imho.ws |
![]() |
|
|
|
# 1 |
|
Full Member
Регистрация: 29.05.2002
Сообщения: 544
![]() ![]() ![]() ![]() ![]() |
когда следует использовать mysql_close() ?
Вобщем, решил я написать свой простенький dal-компонент(точнее переписать) для доступа к mysql. понимаю, что есть PEAR, но всегда хочется иметь под рукой что-то легкое...
Ок. Сказано - сделано. Решил его потестировать, а заодно опробовать графический интерфейс прораммы MySqlAdministrator(там завлекательные графики и таблицы текущей нагрузки на сервер). Создаю бд(myIsam). Заполняю ее данными. Но все это не суть важно, на самом деле. Значит создал я следующий тест: Код:
<?
for(int i=0; i<10000; i++)
{
TestFunc();
}
function TestFunc()
{
//создаем экземпляр моего класса
//коннектимся и выбираем бд
//выполняем запрос(берем все 8 записей)
//парсим результат и выводи скажем первое поле
//а тут внимание! вызываем функцию(моего класса, которая инкапсулирует закрытие соединения с бд!
}
?>
если я убираю закрытие соединения - то все просто летает, но позрастает траффик(это показывает MySqlAdministrator). я знаю, что если параметры функции mysql_connect такие же, что и в прошлый раз и есть живой реальный экземпляр соединения, то нового соединения к базе не будет, а вернется лишь новый ресурс. кстати это косвенно подверждается тем, что текущих соединений не больше 5(смотрел опять же через MySqlAdministrator). эта цифра кстати не зависила у меня от того "закрывал" ли я соединение или нет(с помощью - mysql_close(). вобщем разъясните что не так с этим mysql_close() и может его вообще не нужно вызывать?
__________________
убрано по просьбе администратора
|
|
|
|
|
# 3 |
|
Full Member
Регистрация: 29.05.2002
Сообщения: 544
![]() ![]() ![]() ![]() ![]() |
а тем, что работает медленее, я имел ввиду траффик за определенное время(т.е. в единицу времени он меньше), а не вообще, т.е. нагрузка на сервер будет поменьше(?). вобщем я решил забить на close
потому что внятного ответа пока не нашел.p.s. к чему это все веду?! а к тому, что я привык уже писать объектный код. т.е. например: Код:
class User
{
GetUserByUserId(userId)
{
//тут инкапсулируется получение из бд нужного юзера
}
}
Код:
$user = new User(); $user->GetUserByUserId(1); если есть какие-то мысли, пишите.
__________________
убрано по просьбе администратора
Последний раз редактировалось Sheryld; 15.07.2004 в 00:21. |
|
|
|
|
# 4 |
|
::VIP::
Регистрация: 12.11.2002
Адрес: Nicosia, Cyprus
Сообщения: 1 285
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
А смысл вообще использовать mysql_close? Если у тебя non-persisten link - то он сам закроется по выходу из скрипта. Если же постоянный - то его mysql_close все равно не закрывает. Так что я не вижу особого в этом смысла.
PS: кста, в мануале так и написано: "Using mysql_close() isn't usually necessary"
__________________
"If people only knew how hard I work to gain my mastery, it wouldn't seem so wonderful at all." Michelangelo Buonarroti |
|
|
|
|
# 5 |
|
Junior Member
Регистрация: 04.03.2004
Сообщения: 56
![]() |
Sheryld
Чтобы работало быстрее, лучше создать специальный класс -- список пользователей, в котором будешь получать всех пользователей по какому-то принципу _одним_ запросом и заносить информацию в массив. Так будет на порядок быстрее, чем делать множество мелких запросов, да и траффик (суммарный) уменьшится. |
|
|
|
|
# 6 |
|
Junior Member
Регистрация: 22.05.2004
Сообщения: 112
![]() |
а почему бы не сделать обйект connection, каторый не вклютчать v testfunc ... то есть приконнектица, потом выполнить цикл .... потом закрыт соединение .... то есть типа
Код:
connect();
for(int i=0; i<10000; i++)
{
TestFunc();
}
disconnect();
|
|
|
|
|
# 7 | ||
|
Guest
Сообщения: n/a
|
Цитата:
Цитата:
Не вижу никакого смысла открывать/закрывать соединение в функции. Вариант aoxyz_30330 куда более рационален. |
||
|
|
# 8 |
|
Full Member
Регистрация: 29.05.2002
Сообщения: 544
![]() ![]() ![]() ![]() ![]() |
Вобщем, раз уж подняли эту тему снова, то давайте плдведем некий итог.
Как ты видишь, я как раз с этим не спорю(что после вызова mysql_close, соединение будет устанавливаться заново). Класс свой я переписал довольно давно. Просто сделал его singleton, и везде, где мне нужно соединение с базой я передаю экзепляр этого класса по ссылке. Хотя можно делать и так: Код:
function foo()
{
mysql_connect();
}
__________________
убрано по просьбе администратора
|
|
|