คำถามติดแท็ก memory-leak

3
Magento 1: การปรับปรุงประสิทธิภาพเพื่อลบเอนทิตี
ฉันกำลังพยายามปรับปรุงสองโมดูลเกี่ยวกับประสิทธิภาพ บางท่านอาจรู้จักการใช้walk()วิธีการในการรวบรวมซึ่งมีประโยชน์มากในการหลีกเลี่ยงการวนซ้ำผ่านผลิตภัณฑ์โดยตรง ยิ่งไปกว่านั้นและขอบคุณ @Vinai เราสามารถใช้delete()วิธีการรวบรวมได้เช่นกัน แต่ฉันสังเกตเห็นว่าไฟล์ดั้งเดิมของ Magento 1 ไม่ได้ใช้วิธีการใด ๆ ในการลบ หนึ่งในรหัสที่เลวร้ายที่สุดที่ผมเคยเห็นเป็นmassDelete()วิธีการจากการapp/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.phpที่ผลิตภัณฑ์จะถูกโหลดในวงก่อนที่จะลบ foreach ($productIds as $productId) { $product = Mage::getSingleton('catalog/product')->load($productId); Mage::dispatchEvent('catalog_controller_product_delete', array('product' => $product)); $product->delete(); } ดังนั้นฉันจึงทำการทดสอบประสิทธิภาพเพิ่มการเรียกการบันทึกเพื่อตรวจสอบเวลาที่ใช้และการใช้หน่วยความจำสำหรับการลบผลิตภัณฑ์ 100 รายการ ทดสอบ 1: walkวิธีการ ฉันแทนที่รหัสเดิมที่วางไว้ด้านบนด้วยรหัสนี้: $collection = Mage::getResourceModel('catalog/product_collection') ->addAttributeToSelect('entity_id') ->addIdFilter($productIds) ->walk('delete'); และผลลัพธ์ของฉันมีดังต่อไปนี้บนเซิร์ฟเวอร์ dev ของฉันเส็งเคร็ง (โดยเฉลี่ยจากการทดสอบ 10 ครั้ง): รหัสเดิม: 19.97 วินาทีใช้ 15.84MB รหัสที่กำหนดเอง: …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.