[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
100W, 输出到文件. 1.9s (包括 1.3s 的启动及编译时间
  1. #!/usr/bin/pwsh -nop
  2. $Source = @"
  3. using System.IO;
  4. using System.Linq;
  5. using System;
  6. namespace Foo
  7. {
  8.     public static class Bar
  9.     {
  10.         private static Random random = new Random();
  11.         
  12.         public static void RandomString()
  13.         {
  14.             const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  15.             using (var file = new StreamWriter("test.txt")) {
  16.                 for (int i = 0; i <= 1000000; i++) {
  17.                     file.WriteLine(new string(Enumerable.Range(1, 7).Select(n => chars[random.Next(n == 1 ? 26 : chars.Length)]).ToArray()));
  18.                 }
  19.             }
  20.         }
  21.     }
  22. }
  23. "@
  24. Add-Type -TypeDefinition $Source -Language CSharp
  25. [Foo.Bar]::RandomString();
复制代码
应该也算 PowerShell 吧 (笑
2

评分人数

TOP

回复 8# xczxczxcz


    Linux 上 pwsh 比较慢
直接用 mono 编译运行的话, 就只要 0.56s 左右

TOP

本帖最后由 bailong360 于 2019-3-22 22:14 编辑

回复 7# bailong360


    这段 C# 好像太快了点...

我用 Rust 实现了一下, 然而也花了 3s. 目前正在向 Rust 大佬们寻求优化方案......
  1. use rand::{seq::SliceRandom, FromEntropy};
  2. use rand_xorshift::XorShiftRng;
  3. use std::fs::File;
  4. use std::io::Write;
  5. fn main() {
  6.     let chars = b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  7.     let mut rng = XorShiftRng::from_entropy();
  8.     let mut file = File::create("test.txt").unwrap();
  9.     for _ in 0..1000000 {
  10.         let v = (0..7)
  11.             .map(|n| {
  12.                 if n == 0 {
  13.                     *chars.choose(&mut rng).unwrap()
  14.                 } else {
  15.                     **(&chars[0..26].choose(&mut rng).unwrap())
  16.                 }
  17.             })
  18.             .collect::<Vec<_>>();
  19.         file.write_all(&v).unwrap();
  20.         file.write_all(&[b'\n']).unwrap();
  21.     }
  22. }
复制代码
=== 更新 ===
艹, 应该用 BufWriter wrap 一下, 这样就 0.16s 左右了...
  1. let file = File::create("test.txt").unwrap();
  2. let mut file = BufWriter::new(file);
复制代码
1

评分人数

    • xczxczxcz: Rust 不会用,不知和C比哪个好?技术 + 1

TOP

返回列表