檔案IO操作開發筆記(二):使用Cpp的ofstream對磁碟檔案儲存進行效能測試及工具
前言
版本v1.1.0
測試工具v1.1.0下載地址
使用C++的ofstream測試結果
USB3.0行動硬碟測試結果
M.2主機板上SSD測試結果
使用C++的ofstream(用flush)測試結果
USB3.0行動硬碟測試結果
M.2主機板上SSD測試結果
關鍵程式碼
void FileIoTestManager::slot_optFileUseCppOfstream(int loopTime, int loopWrite, int dataSize, bool flush){ QDir dir; QString dirPath = QString("%1/%2") .arg(QApplication::applicationDirPath()) .arg(QDateTime::currentDateTime().toString("yyyy-MM-dd hh_mm_ss_zzz")); if(dir.mkpath(dirPath)) { message(QString("建立資料夾成功: %1").arg(dirPath)); }else{ message(QString("建立資料夾失敗: %1").arg(dirPath)); } // 生成資料 message(QString("生成測試資料,資料長度: %1").arg(dataSize)); QByteArray byteArray; byteArray.append(dataSize, 0xFF); message(QString("==========================測試開始==============================")); double totalTime = 0; // 總計時間 double fileTotalTime = 0; // 操作單個檔案總時間 double writeFileTime = 0; // 單個檔案單詞寫入時間 totalTime = QDateTime::currentDateTime().toMSecsSinceEpoch() * 1.0f; for(int loopIndex = 0; loopIndex < loopTime; loopIndex++) { QString filePath = QString("%1/%2_%3") .arg(dirPath) .arg(QDateTime::currentDateTime().toString("hh_mm_ss_zzz")) .arg(loopIndex, 6, 10, QChar('0')); std::ofstream outFile; outFile.open(filePath.toUtf8().constData()); writeFileTime = QDateTime::currentDateTime().toMSecsSinceEpoch(); for(int writeIndex = 0; writeIndex < loopWrite; writeIndex++) {// message(QString(" 第%1次寫入檔案,寫入長度%2位元組").arg(writeIndex + 1).arg(dataSize)); outFile << byteArray.constData(); if(flush) { outFile.flush(); } if(_stop) { outFile.close(); message(QString("==========================測試手動停止===========================")); _stop = false; emit signal_finished(); return; } } writeFileTime = QDateTime::currentDateTime().toMSecsSinceEpoch() - writeFileTime; writeFileTime = writeFileTime / loopWrite; message(QString("每次寫入資料平均耗時(不包含開啟關閉檔案): %1ms").arg(writeFileTime));// message(QString(" 第%1次關閉檔案").arg(loopIndex + 1)); outFile.close(); } message(QString("==========================測試結果==============================")); totalTime = QDateTime::currentDateTime().toMSecsSinceEpoch() - totalTime; fileTotalTime = totalTime * 1.0f / loopTime; message(QString("操作建立檔案次數: %1, 單個檔案迴圈寫入次數: %2, 每次寫入固定資料長度: %3, %4") .arg(loopTime) .arg(loopWrite) .arg(dataSize) .arg(flush ? "每次使用flush" : "不使用flush")); message(QString("總耗時: %1ms").arg(totalTime)); message(QString("單個檔案迴圈寫入平均總耗時(包括開啟關閉檔案): %1ms").arg(fileTotalTime)); message(QString("每次寫入資料平均耗時(包括開啟關閉檔案: %1ms").arg(fileTotalTime * 1.0f / loopWrite)); message(QString("==========================測試結束==============================")); emit signal_finished(); return;}
工程模板v1.1.0
後續
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70010283/viewspace-2931538/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 檔案IO操作開發筆記(一):使用Qt的QFile對磁碟檔案儲存進行效能測試以及測試工具筆記QT
- 各個資料庫存二進位制大檔案的效能測試資料庫
- 檔案IO操作
- 04 磁碟儲存和檔案系統
- 【Python基礎】Python處理Excel檔案,進行篩選資料、排序等操作及儲存新的Excel檔案PythonExcel排序
- Java 檔案 IO 操作Java
- Linux檔案IO操作Linux
- 檔案儲存
- java IO流 對檔案操作的程式碼集合Java
- Electron 開啟儲存檔案對話方塊
- python file 檔案操作筆記Python筆記
- Mysql匯出檔案及備份操作筆記MySql筆記
- Spring Boot 整合阿里雲 OSS 進行檔案儲存Spring Boot阿里
- Java對檔案的操作及UDP,TCPJavaUDPTCP
- #用openfiledialog檔案和savefileDialog開啟和儲存檔案
- Android 檔案儲存Android
- CSV檔案儲存
- 儲存json檔案JSON
- 使用 Docker 搭建 minio 檔案儲存Docker
- 資料儲存--檔案儲存
- 檔案IO操作的最佳實踐
- 塊儲存 檔案儲存 物件儲存物件
- 使用jmeter測試工具完成檔案的上傳JMeter
- 使用jmeter測試工具完成檔案的下載JMeter
- 二進位制檔案記憶體對映記憶體
- c++ IO類,檔案操作C++
- 檔案IO中基礎操作
- Java 檔案 IO 操作之 DirectIOJava
- IPFS的檔案儲存模式模式
- (slam工具)1檔案讀取和儲存SLAM
- Springboot整合MongoDB儲存檔案、讀取檔案Spring BootMongoDB
- python對檔案的操作Python
- 【Python3網路爬蟲開發實戰】5-資料儲存-1 檔案儲存-2 JSON檔案儲存Python爬蟲JSON
- python 儲存檔案jsonPythonJSON
- hive檔案儲存格式Hive
- 檔案操作(二進位制拷貝)
- 【Go】使用壓縮檔案優化io (二)Go優化
- Git檔案操作(二)Git