gpt4 book ai didi

rust - 解析 40MB 文件明显比等效的 Pascal 代码慢

转载 作者:行者123 更新时间:2023-12-03 11:34:13 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why is my Rust program slower than the equivalent Java program?

(1 个回答)


2年前关闭。



use std::fs::File;
use std::io::Read;

fn main() {
let mut f = File::open("binary_file_path").expect("no file found");
let mut buf = vec![0u8;15000*707*4];
f.read(&mut buf).expect("Something went berserk");
let result: Vec<_> = buf.chunks(2).map(|chunk| i16::from_le_bytes([chunk[0],chunk[1]])).collect();
}

我想读取一个二进制文件。最后一行大约需要 15 秒。我希望它只需要几分之一秒。我该如何优化它?

最佳答案

您的代码看起来编译器应该能够适本地优化它。确保使用 cargo build --release 在 Release模式下编译它。 .将 40MB 的数据转换为原生字节序应该只需要几分之一秒。

您可以使用 byeteorder 简化代码并节省一些不必要的复制。箱。它为 Read 的所有实现者定义了一个扩展特征。 ,可以直接调用 read_i16_into() 在文件对象上。

use byteorder::{LittleEndian, ReadBytesExt};
use std::fs::File;

let mut f = File::open("binary_file_path").expect("no file found");
let mut result = vec![0i16; 15000 * 707 * 2];
f.read_i16_into::<LittleEndian>(&mut result).unwrap();

关于rust - 解析 40MB 文件明显比等效的 Pascal 代码慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61679077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com