我有一个用Rust和wasm bindgen编写的web应用程序,需要存储状态.状态存储如下:
lazy_static! {
static ref ID_TO_DATA: Mutex<HashMap<u32, Data>> = Mutex::new(HashMap::new());
}
pub struct Data {
pub coder_id: u16,
pub bools: Vec<bool>,
pub ints: Vec<i32>,
pub strings: Vec<String>,
}
我try 了以下操作来删除数据并释放内存,数据从HashMap
中删除,并且没有报告任何错误:
#[wasm_bindgen]
pub fn remove_data(id: u32) {
match ID_TO_DATA.lock().unwrap().remove(&id) {
Some(data) => {
std::mem::drop(data);
}
None => {}
}
}
然而,浏览器选项卡使用的内存从未下降(使用Chrome 67).我使用Windows的任务管理器,观察相关进程/选项卡的内存增长到几乎2GB,然后在我的程序删除所有条目后,我等了一分钟,内存仍然保持在几乎2GB.
我也try 了以下方法,但得到了这个错误:RuntimeError: memory access out of bounds
#[wasm_bindgen]
pub fn remove_data(id: u32) {
match ID_TO_DATA.lock().unwrap().remove(&id) {
Some(mut data) => {
unsafe {
std::ptr::drop_in_place(&mut data);
}
}
None => {}
}
}
我怎样才能成功地释放这个内存?