Compare commits

..

2 Commits

Author SHA1 Message Date
10947620c1
优化性能和速度 2024-03-09 19:04:11 +08:00
211cf06f29
更新了代码中的打印语句和速度计算方法。 2024-03-09 19:00:52 +08:00
6 changed files with 51 additions and 61 deletions

View File

@ -1,7 +1,7 @@
[workspace] [workspace]
members = [ members = [
"nbt-test", "nbt-test",
# "shen-nbt1", # EOL! "shen-nbt1", # EOL!
"shen-nbt2", "shen-nbt2",
"shen-nbt3", "shen-nbt3",
"shen-nbt4", "shen-nbt4",

View File

@ -36,45 +36,41 @@ writen in rust!
```text ```text
cargo run --release -- .\test-data\test-zip cargo run --release -- .\test-data\test-zip
Hello, nbt!
============ small test ============ ============ small test ============
=== nbt v1 === === nbt v1 ===
time: 1.2222941s speed: 1263.1984397208494 (bytes/sec) time: 872.8818ms
1.233592226289892 (kb/sec) speed: 1768.853469049303 (bytes/s)
0.0012046799084862226 (mb/sec) 1.72739596586846 (KB/s)
1.1764452231310768e-6 (gb/sec)
10 5
Level
=== nbt v2 === === nbt v2 ===
time: 269.1µs speed: 5737643.9985135645 (bytes/sec) time: 33.9µs
5603.167967298403 (kb/sec) speed: 45545722.71386431 (bytes/s)
5.4718437180648465 (mb/sec) 44478.24483775812 (KB/s)
0.005343597380922702 (gb/sec) 43.43578597437316 (MB/s)
=== nbt v3 === === nbt v3 ===
time: 58µs speed: 26620689.655172415 (bytes/sec) time: 54.7µs
25996.76724137931 (kb/sec) speed: 28226691.04204753 (bytes/s)
25.387468009159484 (mb/sec) 27565.12797074954 (KB/s)
0.02479244922769481 (gb/sec) 26.9190702839351 (MB/s)
10 5
Level
=== nbt v4 === === nbt v4 ===
time: 211.7µs speed: 7293339.631554086 (bytes/sec) time: 24.3µs
7122.401983939537 (kb/sec) speed: 63539094.65020576 (bytes/s)
6.955470687440954 (mb/sec) 62049.897119341564 (KB/s)
0.006792451843204057 (gb/sec) 60.595602655606996 (MB/s)
=== nbt v5 === === nbt v5 ===
time: 34.6µs speed: 44624277.456647396 (bytes/sec) time: 23.7µs
43578.39595375722 (kb/sec) speed: 65147679.32489452 (bytes/s)
42.55702729859104 (mb/sec) 63620.7805907173 (KB/s)
0.04155959697128031 (gb/sec) 62.129668545622366 (MB/s)
=== fastnbt === === fastnbt ===
time: 37.7µs speed: 40954907.161803715 (bytes/sec) time: 28.9µs
39995.02652519894 (kb/sec) speed: 53425605.536332175 (bytes/s)
39.05764309101459 (mb/sec) 52173.44290657439 (KB/s)
0.038142229581068936 (gb/sec) 50.95062783845155 (MB/s)
============ cli test ============ ============ cli test ============
=== shen nbt 5 === === shen nbt 5 ===
time: 2.2960054s speed: 2509544103.424147 (bytes/sec) time: 2.2855815sspeed: 2520989434.4174557 (bytes/s)
2450726.6635001437 (kb/sec) 2461903.7445482966 (KB/s)
2393.287757324359 (mb/sec) 2404.202875535446 (MB/s)
2.3371950755120694 (gb/sec) 2.347854370640084 (GB/s)
``` ```

View File

@ -116,24 +116,32 @@ fn big_read_test() {
read_test(data.to_vec()); read_test(data.to_vec());
} }
pub fn print_speed(speed: f64) {
println!("speed: {} (bytes/s)", speed);
let speeds = vec![
speed / 1024.0,
speed / 1024.0 / 1024.0,
speed / 1024.0 / 1024.0 / 1024.0,
speed / 1024.0 / 1024.0 / 1024.0 / 1024.0,
];
// 只输出 > 1024 的
for (i, speed) in speeds.iter().enumerate() {
if *speed > 1.0 {
println!("{:?} ({}/s)", speed, ["KB", "MB", "GB", "TB"][i]);
}
}
}
macro_rules! test_lib { macro_rules! test_lib {
($func: block, $name: expr, $len: expr) => { ($func: block, $name: expr, $len: expr) => {
std::thread::sleep(std::time::Duration::from_secs(1)); std::thread::sleep(std::time::Duration::from_micros(100));
let start_time = std::time::Instant::now(); let start_time = std::time::Instant::now();
$func $func
let end_time = std::time::Instant::now(); let end_time = std::time::Instant::now();
println!("=== {} ===", $name); println!("=== {} ===", $name);
print!("time: {:?}", end_time - start_time); println!("time: {:?}", end_time - start_time);
println!(" speed: {:?} (bytes/sec)", $len as f64 / (end_time - start_time).as_secs_f64()); let raw_speed = $len as f64 / (end_time - start_time).as_secs_f64();
println!("{:?} (kb/sec)", $len as f64 / (end_time - start_time).as_secs_f64() / 1024.0); print_speed(raw_speed);
println!(
"{:?} (mb/sec)",
$len as f64 / (end_time - start_time).as_secs_f64() / 1024.0 / 1024.0
);
println!(
"{:?} (gb/sec)",
$len as f64 / (end_time - start_time).as_secs_f64() / 1024.0 / 1024.0 / 1024.0
);
#[cfg(feature = "core_debug")] #[cfg(feature = "core_debug")]
println!("nbt_data: {:#?}", nbt_data); println!("nbt_data: {:#?}", nbt_data);
}; };
@ -252,16 +260,8 @@ fn cli_read_test() {
let end_time = std::time::Instant::now(); let end_time = std::time::Instant::now();
println!("=== shen nbt 5 ==="); println!("=== shen nbt 5 ===");
print!("time: {:?}", end_time - start_time); print!("time: {:?}", end_time - start_time);
println!(" speed: {:?} (bytes/sec)", len as f64 / (end_time - start_time).as_secs_f64()); let raw_speed = len as f64 / (end_time - start_time).as_secs_f64();
println!("{:?} (kb/sec)", len as f64 / (end_time - start_time).as_secs_f64() / 1024.0); print_speed(raw_speed);
println!(
"{:?} (mb/sec)",
len as f64 / (end_time - start_time).as_secs_f64() / 1024.0 / 1024.0
);
println!(
"{:?} (gb/sec)",
len as f64 / (end_time - start_time).as_secs_f64() / 1024.0 / 1024.0 / 1024.0
);
#[cfg(feature = "core_debug")] #[cfg(feature = "core_debug")]
println!("nbt_data: {:#?}", nbt_data); println!("nbt_data: {:#?}", nbt_data);
// println!("nbt len {}", nbt_data.as_byte().is_some()); // println!("nbt len {}", nbt_data.as_byte().is_some());

View File

@ -473,9 +473,7 @@ impl<'value> Value<'value> {
let mut nbt_data = NbtData::new(data); let mut nbt_data = NbtData::new(data);
let _type_id = nbt_data.read_byte(); let _type_id = nbt_data.read_byte();
let _name_len = nbt_data.read_short(); let _name_len = nbt_data.read_short();
println!("{} {}", _type_id, _name_len);
let name = String::from_utf8(nbt_data.read_bytes(_name_len as usize)).unwrap(); let name = String::from_utf8(nbt_data.read_bytes(_name_len as usize)).unwrap();
println!("{}", name);
Value::read_compound(&mut nbt_data) Value::read_compound(&mut nbt_data)
} }
} }

View File

@ -429,9 +429,7 @@ impl<'value> Value<'value> {
let mut nbt_data = NbtData::new(&mut data[..]); let mut nbt_data = NbtData::new(&mut data[..]);
let _type_id = nbt_data.read_byte(); let _type_id = nbt_data.read_byte();
let _name_len = nbt_data.read_short(); let _name_len = nbt_data.read_short();
// println!("{} {}", _type_id, _name_len);
let _name = String::from_utf8(nbt_data.read_bytes(_name_len as usize)).unwrap(); let _name = String::from_utf8(nbt_data.read_bytes(_name_len as usize)).unwrap();
// println!("{}", _name);
Value::read_compound(&mut nbt_data) Value::read_compound(&mut nbt_data)
} }
} }

View File

@ -468,9 +468,7 @@ impl<'value> Value<'value> {
let mut nbt_data = NbtData::new(data); let mut nbt_data = NbtData::new(data);
let _type_id = nbt_data.read_byte(); let _type_id = nbt_data.read_byte();
let _name_len = nbt_data.read_short(); let _name_len = nbt_data.read_short();
println!("{} {}", _type_id, _name_len);
let name = String::from_utf8(nbt_data.read_bytes(_name_len as usize)).unwrap(); let name = String::from_utf8(nbt_data.read_bytes(_name_len as usize)).unwrap();
println!("{}", name);
Value::read_compound(&mut nbt_data) Value::read_compound(&mut nbt_data)
} }
} }