Java Stopwatch類,性能與時(shí)間計(jì)時(shí)器案例詳解
在研究性能的時(shí)候,完全可以使用Stopwatch計(jì)時(shí)器計(jì)算一項(xiàng)技術(shù)的效率。但是有時(shí)想知道某想技術(shù)的性能的時(shí)候,又常常想不起可以運(yùn)用Stopwatch這個(gè)東西,太可悲了。
屬性:
Elapsed 獲取當(dāng)前實(shí)例測(cè)量得出的總運(yùn)行時(shí)間。
ElapsedMilliseconds 獲取當(dāng)前實(shí)例測(cè)量得出的總運(yùn)行時(shí)間(以毫秒為單位)。
ElapsedTicks 獲取當(dāng)前實(shí)例測(cè)量得出的總運(yùn)行時(shí)間(用計(jì)時(shí)器計(jì)時(shí)周期表示)。
IsRunning 獲取一個(gè)指示 Stopwatch 計(jì)時(shí)器是否在運(yùn)行的值。
方法
GetTimestamp 獲取計(jì)時(shí)器機(jī)制中的當(dāng)前最小時(shí)間單位數(shù)。
Reset 停止時(shí)間間隔測(cè)量,并將運(yùn)行時(shí)間重置為零。
Restart 停止時(shí)間間隔測(cè)量,將運(yùn)行時(shí)間重置為零,然后開(kāi)始測(cè)量運(yùn)行時(shí)間。
Start 開(kāi)始或繼續(xù)測(cè)量某個(gè)時(shí)間間隔的運(yùn)行時(shí)間。
StartNew 對(duì)新的 Stopwatch 實(shí)例進(jìn)行初始化,將運(yùn)行時(shí)間屬性設(shè)置為零,然后開(kāi)始測(cè)量運(yùn)行時(shí)間。
Stop 停止測(cè)量某個(gè)時(shí)間間隔的運(yùn)行時(shí)間。
示例:
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start(); //開(kāi)始計(jì)時(shí)
WebClient wc = new WebClient();
string str = wc.DownloadString("http://www.jmeii.com/");
Console.WriteLine(sw.IsRunning); //輸出 true 計(jì)時(shí)器是否在運(yùn)行。
sw.Stop(); //計(jì)時(shí)結(jié)束
Console.WriteLine(sw.Elapsed); //輸出 00:00:00.3452873
Console.WriteLine(sw.ElapsedMilliseconds); //輸出 223
Console.WriteLine(sw.ElapsedTicks); //輸出501838
Console.WriteLine(sw.IsRunning); //輸出 flase
Console.WriteLine(Stopwatch.GetTimestamp()); //輸出56151531319 獲取計(jì)時(shí)器機(jī)制中的當(dāng)前最小時(shí)間單位數(shù)。
sw.Reset(); //重置
Console.WriteLine(sw.Elapsed.ToString()); //輸出 00:00:00 //返回的是TimeSpan類型,可以任意處理
sw.Restart(); //重新開(kāi)始
FileStream fs = new FileStream(@"D:\admin_b.txt", FileMode.Open, FileAccess.Read);
//string str =
byte[] byteArr = new byte[fs.Length];
fs.Read(byteArr, 0, (int)fs.Length);
Stopwatch sw2 = Stopwatch.StartNew(); //創(chuàng)建一個(gè)新的計(jì)時(shí)器
string str2 = Encoding.UTF8.GetString(byteArr);
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds); //輸出 10
Console.WriteLine(sw2.ElapsedMilliseconds); //輸出 9
sw2.Stop();
Console.ReadKey();
}
對(duì)比FileStream與File類:
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start();
FileStream fs = new FileStream(@"D:\admin_b.txt", FileMode.Open, FileAccess.Read);
//string str =
byte[] byteArr = new byte[fs.Length];
fs.Read(byteArr, 0, (int)fs.Length);
string str = Encoding.UTF8.GetString(byteArr);
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds); //輸出 12
Stopwatch sw2 = new Stopwatch();
sw2.Start();
File.ReadAllText(@"E:\admin_b.txt");
sw2.Stop();
Console.WriteLine(sw2.ElapsedMilliseconds); //輸出 11
Console.ReadKey();
}
Linq示例:
public class Program
{
static void Main(string[] args)
{
//獲取到一個(gè)隨機(jī)數(shù)集合
List<int> ListInt = new List<int>();
Random r = new Random();
for (int i = 0; i < 1000000; i++) //生成一個(gè)1百萬(wàn)數(shù)字的集合
{
ListInt.Add(r.Next(1000));
}
Stopwatch sw = new Stopwatch();
sw.Start();
int count = 0;
foreach (var i in ListInt)
{
count = count + i;
}
Console.WriteLine("遍歷計(jì)算結(jié)果:" + count);
sw.Stop();
Console.WriteLine("遍歷用時(shí):" + sw.ElapsedMilliseconds); //輸出 13
Stopwatch sw2 = new Stopwatch();
sw2.Start();
int count2 = 0;
count2 = ListInt.Sum();
Console.WriteLine("Linq的計(jì)算結(jié)果:" + count2);
Console.WriteLine("Linq的使用時(shí)間:" + sw2.ElapsedMilliseconds); //輸出 12
sw2.Stop();
Console.ReadKey();
}
}
運(yùn)行了3,5次,Linq的性能的確厲害。有幾次相等,有幾次少1毫秒??磥?lái)Linq to OBJECT還真是靠譜。效率,優(yōu)雅度都相當(dāng)好,不愧是高手做的控件。以后如果對(duì)什么技術(shù)又疑問(wèn),完全可以用該類來(lái)測(cè)試,記得,記得,記得得。
到此這篇關(guān)于Java Stopwatch類,性能與時(shí)間計(jì)時(shí)器案例詳解的文章就介紹到這了,更多相關(guān)Java Stopwatch類,性能與時(shí)間計(jì)時(shí)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?注入靜態(tài)對(duì)象使用三種方式示例
這篇文章主要為大家介紹了Spring注入靜態(tài)對(duì)象使用的三種方式示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
基于FeignClient調(diào)用超時(shí)的處理方案
這篇文章主要介紹了基于FeignClient調(diào)用超時(shí)的處理方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java基礎(chǔ)之?dāng)?shù)組模擬循環(huán)隊(duì)列
這篇文章主要介紹了Java基礎(chǔ)之?dāng)?shù)組模擬循環(huán)隊(duì)列,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們也有非常好的幫助,需要的朋友可以參考下2021-04-04
java實(shí)現(xiàn)斐波那契數(shù)列的3種方法
這篇文章主要介紹了java實(shí)現(xiàn)斐波那契數(shù)列的3種方法,有需要的朋友可以參考一下2014-01-01
Java實(shí)現(xiàn)簡(jiǎn)單訂餐系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單訂餐系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01

