Memory leaks HTTPClient中的漏洞在哪里
我已经研究这个问题好几天了,但仍然不知道问题出在哪里 HTTPClient没有被正确清理,因此当循环下载100个图像时,应用程序内存会爆炸 我在使用appc new-t Tianium创建的简单合金模板中进行测试 只打开一个索引视图,其中一个按钮用于启动下载循环 我的索引文件如下所示:Memory leaks HTTPClient中的漏洞在哪里,memory-leaks,titanium,titanium-mobile,titanium-alloy,appcelerator-alloy,Memory Leaks,Titanium,Titanium Mobile,Titanium Alloy,Appcelerator Alloy,我已经研究这个问题好几天了,但仍然不知道问题出在哪里 HTTPClient没有被正确清理,因此当循环下载100个图像时,应用程序内存会爆炸 我在使用appc new-t Tianium创建的简单合金模板中进行测试 只打开一个索引视图,其中一个按钮用于启动下载循环 我的索引文件如下所示: var max = 100 var i = 0 var c = Ti.Network.createHTTPClient(); c.onerror = function () { c = null; } c.
var max = 100
var i = 0
var c = Ti.Network.createHTTPClient();
c.onerror = function () {
c = null;
}
c.onload = function () {
saveFile(this.responseData)
console.log("done get")
i++
getfiles()
}
function getfiles () {
if (i < max) {
try {
c.open('GET', "https://cdn.fossilswitzerland.ch/large0/FS4931.jpg");
c.send();
} catch (e) {
}
} else {
c = null
console.log("finished")
}
}
function saveFile (response) {
console.log("STORING")
var f = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, 'FS4931.jpg');
f.write(response);
if (f.exists() === false) {
console.log("NOT STORED")
} else {
console.log("STORED")
}
f = null;
}
$.index.open();
var max=100
变量i=0
var c=Ti.Network.createHTTPClient();
c、 onerror=函数(){
c=零;
}
c、 onload=函数(){
保存文件(this.responseData)
log(“完成获取”)
我++
getfiles()
}
函数getfiles(){
如果(i
在应用程序启动后,最初内存约为30mb
到现在为止,一直都还不错
单击索引页上的“获取图像”按钮后,内存将增加到约62mb
过了一段时间,数据下降到约50mb,留下20mb的数据下落不明
我正在使用:
Xcode 10.3
Ti SDK版本8.1.1.GA
模拟器:12.4版本的iPad Pro(第二代)
将最大值更改为1000时,内存将飙升至322mb左右,并且似乎不再减少
这是一个非常大的问题,当循环通过和下载比如2000张图片时,因为应用程序只是在某个点崩溃
感谢您的帮助我对代码做了一些更改(对于循环,请使用
文件
属性,不要重复使用httpclient(查看文档),经典代码,以便更快地进行测试):
var w=Ti.UI.createWindow();
var b=Ti.UI.createButton({
标题:“下载”
});
w、 添加(b);
函数onError(e){
控制台日志(“错误”,e);
}
函数onLoad(e){
log(“完成获取”)
}
函数getfiles(e){
对于(变量i=0;i<100;++i){
var c=Ti.Network.createHTTPClient({
onerror:onerror,
加载:加载
});
c、 打开('获取',“https://cdn.fossilswitzerland.ch/large0/FS4931.jpg");
var fname=Ti.Filesystem.applicationSupportDirectory+“/”+(新日期().getTime())+“.jpg”;
console.log(“下载到”,fname);
c、 file=fname;
c、 send();
c=零;
fname=null;
}
}
b、 addEventListener(“单击”,获取文件);
w、 open();
当它释放内存(大约5mb)时,我会有一点开销。您可以创建JIRA票证(),以便他们可以检查它
var w = Ti.UI.createWindow();
var b = Ti.UI.createButton({
title: "download"
});
w.add(b);
function onError(e) {
console.log("error", e);
}
function onLoad(e) {
console.log("done get")
}
function getfiles(e) {
for (var i = 0; i < 100; ++i) {
var c = Ti.Network.createHTTPClient({
onerror: onError,
onload: onLoad
});
c.open('GET', "https://cdn.fossilswitzerland.ch/large0/FS4931.jpg");
var fname = Ti.Filesystem.applicationSupportDirectory + "/" + (new Date().getTime()) + ".jpg";
console.log("Download to", fname);
c.file = fname;
c.send();
c = null;
fname = null;
}
}
b.addEventListener("click", getfiles);
w.open();