是不是我的代碼有問題?
long blockSize = (long) 2 << 10;
long totalSize = 4L << 30;
long totalCount = totalSize / blockSize;
SeekableByteChannel outputStream = Files.newByteChannel(Paths.get("D:\\test"), StandardOpenOption.WRITE, StandardOpenOption.CREATE, StandardOpenOption.DELETE_ON_CLOSE);
ByteBuffer data = ByteBuffer.allocate((int) blockSize);
Random random = new Random(System.currentTimeMillis());
long startTime = System.currentTimeMillis();
for (long i = 0; i < totalCount; i++) {
outputStream.position(Math.abs(random.nextInt()));
outputStream.write(data);
}
outputStream.close();
long stopTime = System.currentTimeMillis();
System.out.println(totalSize * 1000.0 / (stopTime - startTime) / (1 << 20));
uj5u.com熱心網友回復:
100多M/s正常啊,要是達不到這個速度,反而說明代碼或者其它什么地方有瓶頸。我測驗過。uj5u.com熱心網友回復:
快取用完了你會發現更慢uj5u.com熱心網友回復:
樓主是要比較什么?即便是機械硬碟,其讀寫速度達到100M/S也是正常的吧,樓主應該在SSD上跑一次,就看出效果了,單說機械硬碟慢是沒有意義的。沒有對比就沒有傷害。uj5u.com熱心網友回復:
https://www.baidu.com/s?wd=%E6%9C%BA%E6%A2%B0%E7%A1%AC%E7%9B%984k%E8%AF%BB%E5%86%99%E9%80%9F%E5%BA%A6&rsf=64050023&rsp=0&f=1&oq=%E6%9C%BA%E6%A2%B0%E7%A1%AC%E7%9B%984k%E9%9A%8F%E6%9C%BA%E8%AF%BB%E5%86%99%E9%80%9F%E5%BA%A6&tn=58025142_5_oem_dg&ie=utf-8&rsv_pq=87edea5200045a89&rsv_t=76b9qYlkpTjcxs4qJuTI1DF3TIvYK2bGOYh8CT2l3ut1qbEwCv4e7zDgeVDFXI1oYjso8DsIEKY&rqlang=cn&rs_src=https://bbs.csdn.net/topics/0http://tieba.baidu.com/p/4869119339
http://tieba.baidu.com/p/2883354675
人家固態硬碟4k隨機讀寫也才20多M/s
uj5u.com熱心網友回復:
現在普通的SATA 串口硬碟起碼都是150m/s的速度,SATA 3.0 峰值可以達到 600M/s ,但是因為其他硬體或pc狀態限制無法達到。如果你的固態硬碟用的也是SATA 3.0 介面的話,理論上可以到達6g/s 但是實際上也就 最多700m/s,用m.2介面的話會快很多。uj5u.com熱心網友回復:
為什么他們的測評里面固態4k隨機讀寫是20多M/s,我的程式對機械硬碟卻可以達到100多M/s,我的代碼不是4k隨機寫嗎?還是說他們測評的隨機讀寫的定義不一樣?
uj5u.com熱心網友回復:
那為什么網上的測評里面那些固態硬碟的4k隨機讀寫才20多M/s,比機械硬碟還慢?那些測驗軟體的隨機讀寫和上面代碼的隨機讀寫是兩個定義?
uj5u.com熱心網友回復:
一共寫了4G的內容,快取還沒用完?有那么大?
uj5u.com熱心網友回復:
代碼有問題,我在我的電腦上跑了一下,發現檔案根本沒有寫到硬碟上!uj5u.com熱心網友回復:
“發現上!”???
uj5u.com熱心網友回復:
你把StandardOpenOption.DELETE_ON_CLOSE注釋掉,把檔案寫到硬碟上,可以看出檔案的大小不是4G
uj5u.com熱心網友回復:
代碼有問題,我在我的電腦上跑了一下,發現檔案根本沒有寫到硬碟上!
“發現上!”???
你把StandardOpenOption.DELETE_ON_CLOSE注釋掉,把檔案寫到硬碟上,可以看出檔案的大小不是4G
是位置隨機的寫,會覆寫之前寫過的內容,所以檔案大小不可能是4G。要測驗的不是順序寫,是隨機寫。
uj5u.com熱心網友回復:
代碼有問題,我在我的電腦上跑了一下,發現檔案根本沒有寫到硬碟上!
“發現上!”???
你把StandardOpenOption.DELETE_ON_CLOSE注釋掉,把檔案寫到硬碟上,可以看出檔案的大小不是4G
是位置隨機的寫,會覆寫之前寫過的內容,所以檔案大小不可能是4G。要測驗的不是順序寫,是隨機寫。
人家4k隨機讀寫是對整個硬碟而言,你這個隨機讀寫只是一個檔案,差別大了,測出的資料比硬碟測速軟體高很正常,除非你這個檔案寫滿這個硬碟。
uj5u.com熱心網友回復:
100M又不能算多塊,現在下載速度高的也能到100M了uj5u.com熱心網友回復:

你這不是隨機寫,是順序寫,一次寫4k,連續寫了4個G。
隨機是讀寫無數個隨機磁盤位置的4k的獨立的檔案
你這個連續測出來我機械300多 固態2400,和測驗軟體連續寫測驗接近。
uj5u.com熱心網友回復:

每秒3G多
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/281078.html
標籤:Java SE
上一篇:js簡單移動效果
