Closed crack007 closed 5 years ago
初步判定bug出现在vendor/swoft/framework/src/Proxy/Proxy.php 文件的newProxyInstance方法
vendor/swoft/framework/src/Proxy/Proxy.php
newProxyInstance
// Proxy property $id = \uniqid('', false); $proxyClassName = \basename(str_replace("\\", '/', $className)); $proxyClassName = $proxyClassName . '_' . $id; $handlerPropertyName = '__handler_' . $id; // Base class template $template = "class $proxyClassName extends $className { ....."; eval($template);
在生成单例时,只会访问此方法一次,所以没有问题,但是在工厂模式下,会每次都调用此方法,虽然className是一样的,但是每一次都会通过uniqid生成随机后缀,每次都会声明一个类,结果造成内存占用不断增加
https://github.com/swoft-cloud/swoft-component/pull/313/files
@crack007 请将 swoft/framework 组件升级到 1.0.29,然后再看看这个问题
已解决,不过只能通过bean()方法获取不同的对象,无法通过对象属性inject去获取,用@inject方式获取到的是同一个对象,个人觉得没必要用@inject去获取
初步判定bug出现在
vendor/swoft/framework/src/Proxy/Proxy.php
文件的newProxyInstance
方法在生成单例时,只会访问此方法一次,所以没有问题,但是在工厂模式下,会每次都调用此方法,虽然className是一样的,但是每一次都会通过uniqid生成随机后缀,每次都会声明一个类,结果造成内存占用不断增加