Speed up storage iteration from within the runtime (#13479)

* Speed up storage iteration from within the runtime

* Move the cached iterator into an `Option`

* Use `RefCell` in no_std

* Simplify the code slightly

* Use `Option::replace`

* Update doc comment for `next_storage_key_slow`
This commit is contained in:
Koute
2023-03-01 17:58:18 +09:00
committed by GitHub
parent 20bf3c938e
commit 55263fa2a1
9 changed files with 118 additions and 16 deletions
@@ -316,6 +316,19 @@ frame_benchmarking::benchmarks! {
call.dispatch_bypass_filter(RawOrigin::Root.into()).unwrap();
}
storage_iteration {
for i in 0..65000 {
UnboundedMapTwox::<T>::insert(i, sp_std::vec![0; 64]);
}
}: {
for (key, value) in UnboundedMapTwox::<T>::iter() {
unsafe {
core::ptr::read_volatile(&key);
core::ptr::read_volatile(value.as_ptr());
}
}
}
impl_benchmark_test_suite!(
Pallet,
mock::new_test_ext(),