生成大量随机字符串不同实现方式的效率对比
2008-12-04 12:59
441 查看
在26位英文字母中随即选取10个字符组成字符串,产生一定数量的唯一字符串,对比几种方式:
1.使用 System.Security.Cryptography.RNGCryptoServiceProvider 生成 Random 的种子 和 使用普通声称随机数进行对比.
2.使用 IDictionary<TKey , TValue> 其中TKey是 Int 型 存放字符串的HashCode,TValue 是 String 型,存放生成的字符串,通过对比键判断是否项是否已经存在 和 使用 IList<T> 存储字符串进行对比.
3.使用随机截取字符串 和 随机字符串数组索引获取组成字符串.
生成构建 Random 实例种子的方法:
static int GetRandomSeed( )
{
byte[] bytes = new byte[4];
System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider( );
rng.GetBytes( bytes );
return BitConverter.ToInt32( bytes , 0 );
}
生成随机字符串的方法:
static string GetRandomString( )
{
StringBuilder sbPwd = new StringBuilder( );
Random random = new Random( GetRandomSeed( ) );
for ( int i = 0 ; i < length ; i++ )
{
sbPwd.Append( strSource.Substring( random.Next( 0 , 25 ) , 1 ) );
//sbPwd.Append( sourceArray[random.Next( 0 , 25 )] );
}
return sbPwd.ToString( );
}
对比结果:
1.使用 GetRandomSeed( )方法生成 Random 种子 并使用字符截取 使用IDictionary<int , string> 耗时 20688MS 产生重复项 359 生成项:1000000
2.不使用 GetRandomSeed( )方法生成 Random 种子 并使用字符截取 使用IDictionary<int , string> 耗时 1562547MS 产生重复项 127749442 生成项:100000
3.使用 GetRandomSeed( )方法生成 Random 种子 并使用字符串数组 使用IDictionary<int , string> 耗时36125MS 产生重复项 381 生成项:1000000(使用Char数组效率更低,随机取得Char转换成String时要进行装箱)
4.使用GetRandomSeed( )方法生成 Random 种子 并使用字符截取 使用IList<string> 耗时 214719MS 产生重复项2 生成项:100000(生成项越多耗时越长)
可见使用 System.Security.Cryptography.RNGCryptoServiceProvider 生成 Random 种子 产生的效率要高很多,特别是要连续生成大量的随机数,因为 Random 生成值的重复率非常低.
使用字符串的HashCode对比字符串比直接对比字符串效率要高很多.
使用字符串截取比使用字符串数组效率要高点.
1.使用 System.Security.Cryptography.RNGCryptoServiceProvider 生成 Random 的种子 和 使用普通声称随机数进行对比.
2.使用 IDictionary<TKey , TValue> 其中TKey是 Int 型 存放字符串的HashCode,TValue 是 String 型,存放生成的字符串,通过对比键判断是否项是否已经存在 和 使用 IList<T> 存储字符串进行对比.
3.使用随机截取字符串 和 随机字符串数组索引获取组成字符串.
生成构建 Random 实例种子的方法:
static int GetRandomSeed( )
{
byte[] bytes = new byte[4];
System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider( );
rng.GetBytes( bytes );
return BitConverter.ToInt32( bytes , 0 );
}
生成随机字符串的方法:
static string GetRandomString( )
{
StringBuilder sbPwd = new StringBuilder( );
Random random = new Random( GetRandomSeed( ) );
for ( int i = 0 ; i < length ; i++ )
{
sbPwd.Append( strSource.Substring( random.Next( 0 , 25 ) , 1 ) );
//sbPwd.Append( sourceArray[random.Next( 0 , 25 )] );
}
return sbPwd.ToString( );
}
对比结果:
1.使用 GetRandomSeed( )方法生成 Random 种子 并使用字符截取 使用IDictionary<int , string> 耗时 20688MS 产生重复项 359 生成项:1000000
2.不使用 GetRandomSeed( )方法生成 Random 种子 并使用字符截取 使用IDictionary<int , string> 耗时 1562547MS 产生重复项 127749442 生成项:100000
3.使用 GetRandomSeed( )方法生成 Random 种子 并使用字符串数组 使用IDictionary<int , string> 耗时36125MS 产生重复项 381 生成项:1000000(使用Char数组效率更低,随机取得Char转换成String时要进行装箱)
4.使用GetRandomSeed( )方法生成 Random 种子 并使用字符截取 使用IList<string> 耗时 214719MS 产生重复项2 生成项:100000(生成项越多耗时越长)
可见使用 System.Security.Cryptography.RNGCryptoServiceProvider 生成 Random 种子 产生的效率要高很多,特别是要连续生成大量的随机数,因为 Random 生成值的重复率非常低.
使用字符串的HashCode对比字符串比直接对比字符串效率要高很多.
使用字符串截取比使用字符串数组效率要高点.
相关文章推荐
- 生成大量随机字符串不同实现方式的效率对比
- 生成大量随机字符串不同实现方式的效率对比
- 生成大量随机字符串不同实现方式的效率对比
- 生成大量随机字符串不同实现方式的效率对比
- Lua大量字符串拼接方式效率对比及原因分析
- 多线程 +1操作的几种实现方式,及效率对比
- [学习笔记] 随机生成字符串实现
- 基于Oracle,采用JDBC、Hibernate不同方式实现自定义序列主键生成
- Java:io流写入文件的四种实现方式的效率对比
- 生成随机字符串的SQL实现
- 随机生成字符串实现
- php开发笔记(七)用数组函数实现生成随机字符串
- Java字符串连接的多种实现方法及效率对比
- PHP封装函数实现生成随机的字符串验证码
- 下划线转驼峰,3种实现方式效率对比
- 下划线转驼峰,3种实现方式效率对比
- 前端控制器是整个MVC框架中最为核心的一块,它主要用来拦截符合要求的外部请求,并把请求分发到不同的控制器去处理,根据控制器处理后的结果,生成相应的响应发送到客户端。前端控制器既可以使用Filter实现(Struts2采用这种方式),也可以使用Servlet来实现(spring MVC框架)。
- 如何用java实现不同编码方式字符串的转换(包含异常处理、重复不终止输入、缓冲区bufferedreader的使用)
- Python实现生成随机日期字符串的方法示例
- opencv 矩阵元素不同获取方式及其效率对比