Closed developerzjy closed 4 months ago
@developerzjy
你释放这个 model, 就可以释放资源。
fun delete() {
if (ptr != null) {
delete(ptr)
ptr = null
}
}
fun new() {
if (ptr != null) {
return
}
if (assetManager != null) {
ptr = newFromAsset(assetManager, config)
} else {
ptr = newFromFile(config)
}
}
@csukuangfj 感谢回复,delete()和new()方法可以使用
@csukuangfj 感谢回复,delete()和new()方法可以使用
每次创建,都需要一定的时间,即 overhead.
@csukuangfj 感谢回复,delete()和new()方法可以使用
每次创建,都需要一定的时间,即 overhead.
对于java层来说,这个时间就是newFromAsset(assetManager, config)或newFromFile(config)方法的执行时间吗,这两个方法是会阻塞线程的同步方法吗?
demo中我加了synchronized锁,能够保证delete和new的顺序执行,只是不确定new方法内部是同步创建还是异步创建。 加synchronized后,测试多次顺序调用delete和new后,暂时没发现什么问题
是 个 blocking call. 创建完才返回。
是 个 blocking call. 创建完才返回。
也就是说保证new方法执行完后再调用delete方法是没有问题的,感谢解答
是 个 blocking call. 创建完才返回。
也就是说保证new方法执行完后再调用delete方法是没有问题的,感谢解答
如果是在同一个线程里调用 new -> delete -> new -> delete -> new -> delete, 那么你说得对
是 个 blocking call. 创建完才返回。
也就是说保证new方法执行完后再调用delete方法是没有问题的,感谢解答
如果是在同一个线程里调用 new -> delete -> new -> delete -> new -> delete, 那么你说得对
好的,我代码上做一下这个线程处理
在demo代码中,加载100多M的模型后内存占用增加了200多M,demo中只有初始化模型和给sherpa喂音频数据识别的代码,没有相关的资源释放代码。
问题1. jni.cc文件中的底层方法没有注释,想问一下delete方法是用来做释放资源的吗? 问题2. 如果在不需要识别的时候释放sherpa,官方有最佳实践的做法吗。(考虑释放后,可能再次进入识别场景重新初始化启用识别)