using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.IO;
using
System.Diagnostics;
namespace
CA100
{
class
Program
{
//循环次数:5百万次
const
int
COUNT = 5000000;
//外围循环次数:5次
const
int
NUM = 5;
//准确测量运行时间
static
Stopwatch sWatch =
new
Stopwatch();
//每项时间
static
long
t1, t2;
//记录日志
static
StringBuilder sb =
new
StringBuilder();
static
void
Main()
{
string
src =
"C#测试IndexOf()LastIndexOf()Contains()StartsWith()EndsWith()5个方法的效率."
;
Console.WriteLine(
"测试的字符串是:"
+ src +
",测试次数"
+ COUNT);
sb.AppendLine(
"测试的字符串是:"
+ src +
",测试次数"
+ COUNT);
string
str =
"C"
;
//每项循环测试5次
int
i = 0;
Console.WriteLine(
"\n'C'出如今首位时:\n"
);
sb.AppendLine(
"\r\n'C'出如今首位时:\r\n"
);
for
(; i < NUM; i++)
{
Console.WriteLine(
"当前循环第{0}次\n"
, i + 1);
sb.AppendLine(
"当前循环第"
+ (i + 1) +
"次"
);
t1 += IndexOf(src, str);
t2 += StartsWith(src, str);
Console.WriteLine();
sb.AppendLine();
}
Console.WriteLine(
"IndexOf总时间:"
+ t1 +
",平均时间:"
+ t1 / NUM);
sb.AppendLine(
"IndexOf总时间:"
+ t1 +
",平均时间:"
+ t1 / NUM);
Console.WriteLine(
"StartsWith总时间:"
+ t2 +
",平均时间:"
+ t2 / NUM);
sb.AppendLine(
"StartsWith总时间:"
+ t2 +
",平均时间:"
+ t2 / NUM);
Console.WriteLine();
sb.AppendLine();
t1 = 0;
t2 = 0;
str =
"StartsWith"
;
Console.WriteLine(
"'StartsWith'出如今中间:\n"
);
sb.AppendLine(
"'StartsWith'出如今中间:\r\n"
);
for
(i = 0; i < NUM; i++)
{
Console.WriteLine(
"当前循环第{0}次\n"
, i + 1);
sb.AppendLine(
"当前循环第"
+ (i + 1) +
"次"
);
t1 += IndexOf(src, str);
t2 += Contains(src, str);
Console.WriteLine();
sb.AppendLine();
}
Console.WriteLine(
"IndexOf总时间:"
+ t1 +
",平均时间:"
+ t1 / NUM);
sb.AppendLine(
"IndexOf总时间:"
+ t1 +
",平均时间:"
+ t1 / NUM);
Console.WriteLine(
"Contains总时间:"
+ t2 +
",平均时间:"
+ t2 / NUM);
sb.AppendLine(
"Contains总时间:"
+ t2 +
",平均时间:"
+ t2 / NUM);
Console.WriteLine();
sb.AppendLine();
t1 = 0;
t2 = 0;
str =
"."
;
Console.WriteLine(
"'.'出如今末尾:\n"
);
sb.AppendLine(
"'.'出如今末尾:\r\n"
);
for
(i = 0; i < NUM; i++)
{
Console.WriteLine(
"当前循环第{0}次\n"
, i + 1);
sb.AppendLine(
"当前循环第"
+ (i + 1) +
"次"
);
t1 += LastIndexOf(src, str);
t2 += EndsWith(src, str);
Console.WriteLine();
sb.AppendLine();
}
Console.WriteLine(
"LastIndexOf总时间:"
+ t1 +
",平均时间:"
+ t1 / NUM);
sb.AppendLine(
"LastIndexOf总时间:"
+ t1 +
",平均时间:"
+ t1 / NUM);
Console.WriteLine(
"EndsWith总时间:"
+ t2 +
",平均时间:"
+ t2 / NUM);
sb.AppendLine(
"EndsWith总时间:"
+ t2 +
",平均时间:"
+ t2 / NUM);
Console.WriteLine();
sb.AppendLine();
Console.WriteLine(
"测试结束!"
);
sb.AppendLine(
"测试结束!"
);
File.AppendAllText(
@"d:\results.txt"
, sb.ToString());
Console.ReadLine();
}
static
long
IndexOf(
string
src,
string
str)
{
sWatch.Reset();
sWatch.Start();
for
(
int
i = 0; i < COUNT; i++)
{
src.IndexOf(str);
}
sWatch.Stop();
Console.WriteLine(
"IndexOf花费: "
+ sWatch.ElapsedMilliseconds +
"ms"
);
sb.AppendLine(
"IndexOf花费: "
+ sWatch.ElapsedMilliseconds +
"ms"
);
return
sWatch.ElapsedMilliseconds;
}
static
long
LastIndexOf(
string
src,
string
str)
{
sWatch.Reset();
sWatch.Start();
for
(
int
i = 0; i < COUNT; i++)
{
src.LastIndexOf(str);
}
sWatch.Stop();
Console.WriteLine(
"LastIndexOf花费: "
+ sWatch.ElapsedMilliseconds +
"ms"
);
sb.AppendLine(
"LastIndexOf花费: "
+ sWatch.ElapsedMilliseconds +
"ms"
);
return
sWatch.ElapsedMilliseconds;
}
static
long
StartsWith(
string
src,
string
str)
{
sWatch.Reset();
sWatch.Start();
for
(
int
i = 0; i < COUNT; i++)
{
src.StartsWith(str);
}
sWatch.Stop();
Console.WriteLine(
"StartsWith花费: "
+ sWatch.ElapsedMilliseconds +
"ms"
);
sb.AppendLine(
"StartsWith花费: "
+ sWatch.ElapsedMilliseconds +
"ms"
);
return
sWatch.ElapsedMilliseconds;
}
static
long
EndsWith(
string
src,
string
str)
{
sWatch.Reset();
sWatch.Start();
for
(
int
i = 0; i < COUNT; i++)
{
src.EndsWith(str);
}
sWatch.Stop();
Console.WriteLine(
"EndsWith花费: "
+ sWatch.ElapsedMilliseconds +
"ms"
);
sb.AppendLine(
"EndsWith花费: "
+ sWatch.ElapsedMilliseconds +
"ms"
);
return
sWatch.ElapsedMilliseconds;
}
static
long
Contains(
string
src,
string
str)
{
sWatch.Reset();
sWatch.Start();
for
(
int
i = 0; i < COUNT; i++)
{
src.Contains(str);
}
sWatch.Stop();
Console.WriteLine(
"Contains花费: "
+ sWatch.ElapsedMilliseconds +
"ms"
);
sb.AppendLine(
"Contains花费: "
+ sWatch.ElapsedMilliseconds +
"ms"
);
return
sWatch.ElapsedMilliseconds;
}
}
}
|
针对三种状况性能
1.判断以字符串开头测试
IndexOf和StartsWithui
2.判断是否包含字符串url
IndexOf和Containsspa
3.判断以字符串结尾pwa
LastIndexOf和EndsWith日志
测试以某字符串为开头,以使用IndexOf为最佳,有时,StartsWith也会比IndexOf快,概率较低。code
测试包含字符串,以Contains最佳。orm
测试以某字符串结尾,虽然LastIndexOf速度略快,可是很差断定,仍是采用EndsWith为最佳。htm
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
public
partial
class
Form1 : Form
{
public
Form1()
{
InitializeComponent();
}
string
url =
"http://www.0398jobs.com/index.htm"
;
private
void
Form1_Load(
object
sender, EventArgs e)
{
}
//
private
void
button1_Click(
object
sender, EventArgs e)
{
label1.Text =
string
.Empty;
DateTime st = DateTime.Now;
for
(
int
i = 0; i < 10000; i++)
{
if
(url.IndexOf(
"job.com"
) > 0 || url.IndexOf(
"jobs.com"
) > 0)
{
}
}
label1.Text = (DateTime.Now - st).Milliseconds.ToString();
}
//Contains
private
void
button2_Click(
object
sender, EventArgs e)
{
label1.Text =
string
.Empty;
DateTime st = DateTime.Now;
for
(
int
i = 0; i < 10000; i++)
{
if
(url.Contains(
"job.com"
) || url.Contains(
"jobs.com"
))
{
}
}
label1.Text = (DateTime.Now-st).Milliseconds.ToString();
}
}
|
看测试后的效果
IndexOf执行五次
01
02
03
04
05
06
|
38毫秒
36 毫秒
37毫秒
36毫秒
36毫秒
39毫秒
|
Contains执行五次
01
02
03
04
05
06
|
3毫秒
2 毫秒
2毫秒
3毫秒
2毫秒
2毫秒
|
差距这么大我就很少说了,你们一看就明白Contains的性能要远远的超出IndexOf测试源码下载