Pytanie Czy naprawdę muszę zrobić mysql_close ()


Czy naprawdę muszę zrobić mysql_close ()? Dlaczego lub dlaczego nie?

Czy istnieje wyzwalacz, który zamyka łącze po mysql_connect, nawet jeśli nie robię mysql_close?


21
2017-07-29 05:33


pochodzenie


Możliwy duplikat Czy zamknięcie połączenia mysql jest ważne? - NewUser


Odpowiedzi:


W większości przypadków dzwonisz mysql_close nie zrobi żadnej różnicy, pod względem wydajności. Ale zawsze dobrze jest zamykać zasoby (uchwyty plików, otwarte gniazda, połączenia z bazą danych itp.), Których twój program już nie używa.

Jest to szczególnie ważne, jeśli robisz coś, co może zająć kilka sekund - na przykład odczytanie i parsowanie danych z interfejsu API REST. Ponieważ wywołanie API przechodzi przez linię, negatywne warunki sieciowe mogą powodować blokowanie skryptu przez kilka sekund. W takim przypadku odpowiedni czas na otwarcie połączenia z bazą danych to po wywołanie REST zostało zakończone i przeanalizowane.

Podsumowując moją odpowiedź, dwie duże zasady to:

  1. Przydzielaj zasoby (uchwyty plików, gniazda, połączenia z bazą danych itp.), Gdy twój program jest gotowy do ich użycia.
  2. Uwolnij zasoby natychmiast po zakończeniu programu.

6
2017-07-29 05:47





Według dokumentacja:

Użycie mysql_close () zazwyczaj nie jest konieczne, ponieważ nietrwałe otwarte linki są automatycznie zamykane na końcu wykonywania skryptu.

Osobiście zawsze lubię upewnić się, że pedantycznie zamykam wszystko, co otwieram, ale tak nie jest wymagany.


10
2017-07-29 05:35



jaka korzyść z zamknięcia łącza? - denniss
Samo zamknięcie łącza nie przynosi korzyści. - Charles
@Charles Jeśli skrypt skończy się po zakończeniu używania MySQL, może być korzystne zwolnienie połączenia, z którego mogą korzystać inne skrypty. - penguin359


Jakie korzyści płyną z zamknięcia linku?

Zaletą jest to, że można zwolnić połączenie z bazą danych, a odpowiednie zasoby na serwerze bazy danych, wcześniej niż przy czyszczeniu żądania PHP, mogłyby to zrobić.

Załóżmy na przykład, że wyszukujesz wszystkie dane, których potrzebujesz, w ciągu pierwszych 20 milisekund od żądania. Ale wtedy twój kod PHP spędza kolejne 80 milisekund z uruchomionym kodem i formatuje wyniki. Co oznacza, że ​​w 80% przypadków aplikacja otwiera połączenie db bez potrzeby, a średnio 8 na 10 wątków połączenia na serwerze db jest bezczynnych i używa zasobów.


6
2017-12-24 00:30



dzięki za tę odpowiedź. nigdy o tym nie myślałem, ale twoja prosta matematyka pokazuje wielką zaletę zamykania tych połączeń (przynajmniej po to, aby uczynić to standardową praktyką, ponieważ nigdy nie wiesz, czy możesz wprowadzić kod, który może wymagać uruchomienia przez jakiś czas po zakończeniu pracy z bazą danych) . - tyrex


Instrukcja mówi:

Użycie mysql_close () zazwyczaj nie jest konieczne, ponieważ nietrwałe otwarte linki są automatycznie zamykane na końcu wykonywania skryptu.

Więc nie, nie bardzo. Pomocne jest zwolnienie zasobów przed podjęciem operacji, która potencjalnie pochłania duże ilości zasobów, ale prawdopodobnie nie będzie to miało większego znaczenia.


3
2017-07-29 05:37





jaka korzyść z zamknięcia łącza?

Zwykle nie ma korzyści z zamknięcia linku, ponieważ zostanie on automatycznie zamknięty.

Mogę myśleć tylko o kilku korzyściach

  • Jeśli twój skrypt ma dużo przetwarzania do wykonania po zakończeniu korzystania z bazy danych, przedwczesne zamknięcie łącza do bazy danych może pomóc zwolnić trochę pamięci i innych zasobów (takich jak połączenia MySQL), podczas gdy twój skrypt jest kontynuowany z innymi rzeczami. Jest to mało prawdopodobne, aby stanowiło problem w większości skryptów, ponieważ większość skryptów zakończy się dość szybko po zakończeniu połączenia z bazą danych, a czas, w którym połączenie zostanie otwarte przed zakończeniem skryptu PHP, będzie stosunkowo krótki.

  • Kompletność i czystość kodu. To może dać ci dobre samopoczucie i ogólnie dobrą higienę kodu, aby zamknąć to, co otworzyłeś, nawet jeśli w tym przypadku nie jest to technicznie wymagane.


3
2017-07-29 05:49



Jeśli ograniczasz liczbę połączeń do bazy danych, użycie mysql_close () powoduje zwolnienie jednego z tych połączeń, umożliwiając dostęp innym skryptom - Mark Baker