استخدام MySQLi - وهو الأفضل لإغلاق الاستعلامات

StackOverflow https://stackoverflow.com/questions/26515

  •  09-06-2019
  •  | 
  •  

سؤال

لدي عادة إبقاء استخدامي المتغير عند الحد الأدنى.لذلك أتساءل عما إذا كان هناك أي فائدة يمكن الحصول عليها من خلال ما يلي:

$query = $mysqli->query('SELECT * FROM `people` ORDER BY `name` ASC LIMIT 0,30');

// Example 1
$query = $query->fetch_assoc();

// Example 2
$query_r = $query->fetch_assoc();
$query->free();

الآن إذا كنت على حق، يجب أن يكون المثال 1 أكثر كفاءة $query يكون unset عندما أقوم بإعادة تعيينه والذي يجب أن يحرر أي ذاكرة مرتبطة به.ولكن هناك طريقة (MySQLi_Result::free()) الذي يحرر الذاكرة المرتبطة - هل هذا هو نفس الشيء؟

إذا لم أتصل ::free() لتحرير أي ذاكرة مرتبطة بالنتيجة ولكن unset من خلال إعادة تعيين المتغير هل أفعل نفس الشيء؟لا أعرف كيفية تسجيل هذا النوع من الأشياء - هل لدى أي شخص بعض الأفكار؟

هل كانت مفيدة؟

المحلول

ال يدوي يبدو أنه يشير إلى أنه يجب عليك الاستمرار في الاستخدام free() لتحرير الذاكرة.أعتقد أن المنطق هو ذلك free() يتم تحرير الذاكرة في ماي إس كيو إل, ، وليس في PHP.نظرًا لأن PHP لا يمكنها جمع البيانات المهملة لـ MySQL، فأنت بحاجة إلى الاتصال free().

نصائح أخرى

مثال 1 ينأى المتغير $query من نتيجة MySQL.لا تزال نتيجة MySQL موجودة في الذاكرة، وستظل موجودة وتضيع الذاكرة حتى يتم تجميع البيانات المهملة.

مثال 2 يحرر نتيجة MySQL على الفور، مما يؤدي إلى تحرير الموارد المستخدمة.

ومع ذلك، نظرًا لأن صفحات PHP عادةً ما تكون قصيرة العمر مع مجموعات نتائج صغيرة، فإن الذاكرة المحفوظة تكون تافهة.لن تلاحظ التباطؤ إلا إذا غادرت عليه من النتائج في الذاكرة على مدى فترة طويلة من الزمن على الصفحات التي تعمل لفترة طويلة.

براين ، PHP يستطيع تقوم القمامة بجمع نتيجة MySQL، لكن هذا لا يحدث على الفور.النتيجة موجودة في مجمع ذاكرة PHP، وليس في خادم MySQL.

(تختلف منطقة الذاكرة عند استخدام الاستعلامات غير المخزنة قليلاً، ولكن نادرًا ما يتم استخدامها في PHP بحيث لا تستحق الذكر)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top