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和StartsWith
2.判断是否包含字符串
IndexOf和Contains
3.判断以字符串结尾
LastIndexOf和EndsWith
测试以某字符串为开头,以使用IndexOf为最佳,有时,StartsWith也会比IndexOf快,几率较低。
测试包含字符串,以Contains最佳。
测试以某字符串结尾,虽然LastIndexOf速度略快,但是不好判定,还是采用EndsWith为最佳。
[C#]
纯文本查看 复制代码
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执行五次
[C#]
纯文本查看 复制代码
01
02
03
04
05
06
|
38毫秒
36 毫秒
37毫秒
36毫秒
36毫秒
39毫秒
|
Contains执行五次
[C#]
纯文本查看 复制代码
01
02
03
04
05
06
|
3毫秒
2 毫秒
2毫秒
3毫秒
2毫秒
2毫秒
|
差距这么大我就不多说了,大家一看就明白
Contains的性能要远远的超出IndexOf
测试源码下载