试了下thread::spawn 有个疑问
fn main(){
//...
//...
//...
for i in vv.iter(){
key+=1;
if i.is_empty(){
continue
}
let new_file = "./files/".to_owned() + &name.to_owned() + &key.to_string() + ".sgf";
let mut s:String="(;".to_string();
s.push_str(i);
let f_run=thread::spawn(move || {
save_file(new_file,s);
});
v_thread.push(f_run);
}
for child in v_thread{
child.join();
}
println!("{}", now.elapsed().as_secs());
}
fn save_file<P: AsRef<Path>>(path: P,s:String)->Result<String,E>{
//println!("{}",path.as_ref().display());
let f = File::create(path);
match f{
Ok(mut ff)=>{
if s.is_empty(){
println!("file is not empty.");
return Err("file is not empty.".to_string());
}
println!("{:#?}",ff.write_all(s.as_bytes()));
// ff.write_all(s.as_bytes());
println!("{:#?}", ff.sync_data());
//ff.sync_data();
}
_=> return Err("Is is some error, do not write file.".to_string())
}
save_file 函数里 如果采用
println!("{:#?}",ff.write_all(s.as_bytes()));
println!("{:#?}", ff.sync_data());
这两句 大约需要5秒
而直接采用
ff.write_all(s.as_bytes());
ff.sync_data();
同样的两句不打印 需要15、6秒 反而慢
感觉有点神奇 为什么呢
补充一下: 以上都是用 cargo run .. 得出的结果 而build --release 之后反而更慢 神奇的rust
先怀疑一下自己肯定哪里写的不对
1
共 3 条评论, 1 页
评论区
写评论特意切换到 ubuntu的机器上 秒完 快了不知道多少倍 用时 265800828 纳秒 ... 看来是windows io管理上事 不管啦 .....
谢谢答复 都是在windows10下的powershell里面比较的 问题在于print 比 不print要快
--
👇
zhuxiujia: print和控制台程序的效率有关系的啊,比如你在Idea或者Clion里面debug,控制台程序是idea的java实现的。如果你在windows系统命令行执行cargo run --release ,控制台程序是win系统实现的。效率铁定不一样。。。
print和控制台程序的效率有关系的啊,比如你在Idea或者Clion里面debug,控制台程序是idea的java实现的。如果你在windows系统命令行执行cargo run --release ,控制台程序是win系统实现的。效率铁定不一样。。。