このツールではPC同士のあるいは、PC改造前と改造後などの違いが判れば十分ということで作成しました。本来はメモリ情報などもほしかったのですがExcel VBA(Excel2010)単体ではこれらの値が取得できなくなったようなのであきらめました。
一応?シーケンシャルとランダムの読み書きを意識しました。
9個の処理を各3回繰り返しています。このロジックは新しいPCで試しながら作ったため、古いPCで試すと恐ろしく時間がかかってしまいました。
後で確認するようにExcelに結果を出力できるようにもしました。
正規のベンチマークツールのロジックはかなり専門性が高いと思いますが、それを無視して言えば、このベンチマークもどきのツールに限ってはそれほど難しくないと思います。
各処理をタイマー(Timer)関数を使って処理時間を計測しています。
End Function
‘===============================================
‘Write Rondom access
‘===============================================
Function Write_HDD_Random_Access()
Dim Wsh As Worksheet
Dim lngRow As Long
Dim dblSTimer As Double
Dim lngMax As Long
dblSTimer = Timer
Set Wsh = GetWorkbook.Worksheets(strGetSheetName)
lngMax = lngGetMaxCount
For lngRow = 1 To lngMax
Wsh.Cells(Int((lngMax – 1 + 1) * Rnd + 1), 2).Value = lngRow
Call Progress_Bar(lngRow)
Next lngRow
Write_HDD_Random_Access = Timer – dblSTimer
End Function
‘===============================================
‘Read Seqential access
‘===============================================
Function Read_HDD_SQ_Access()
Dim Wsh As Worksheet
Dim lngRow As Long
Dim dblSTimer As Double
Dim lngMax As Long
Dim strData As String
dblSTimer = Timer
Set Wsh = GetWorkbook.Worksheets(strGetSheetName)
lngMax = lngGetMaxCount
For lngRow = 1 To lngMax
strData = Wsh.Cells(lngRow, 1).Value
Call Progress_Bar(lngRow)
Next lngRow
Read_HDD_SQ_Access = Timer – dblSTimer
End Function
‘===============================================
‘Read Rondom access
‘===============================================
Function Read_HDD_Random_Access()
Dim Wsh As Worksheet
Dim lngRow As Long
Dim dblSTimer As Double
Dim lngMax As Long
Dim strData As String
dblSTimer = Timer
Set Wsh = GetWorkbook.Worksheets(strGetSheetName)
lngMax = lngGetMaxCount
For lngRow = 1 To lngMax
strData = Wsh.Cells(Int((lngMax – 1 + 1) * Rnd + 1), 2).Value
Call Progress_Bar(lngRow)
Next lngRow
Read_HDD_Random_Access = Timer – dblSTimer
End Function
‘*************************************************************
‘■■■■MEMORY■■■■
‘*************************************************************
‘===============================================
‘Write Memroy Seqential Access
‘===============================================
Function Write_Mem_SQ_Access()
Dim Wsh As Worksheet
Dim lngRow As Long
Dim dblSTimer As Double
Dim lngMax As Long
Dim strData() As String
dblSTimer = Timer
Set Wsh = GetWorkbook.Worksheets(strGetSheetName)
lngMax = lngGetMaxCount
ReDim strData(lngMax) As String
For lngRow = 1 To lngMax
strData(lngRow) = Wsh.Cells(lngRow, 1).Value
Call Progress_Bar(lngRow)
Next lngRow
Write_Mem_SQ_Access = Timer – dblSTimer
End Function
‘===============================================
‘Write Memroy Random Access
‘===============================================
Function Write_Mem_Random_Access()
Dim Wsh As Worksheet
Dim lngRow As Long
Dim dblSTimer As Double
Dim lngMax As Long
Dim strData() As String
dblSTimer = Timer
Set Wsh = GetWorkbook.Worksheets(strGetSheetName)
lngMax = lngGetMaxCount
ReDim strData(lngMax) As String
For lngRow = 1 To lngMax
strData(Int((lngMax – 1 + 1) * Rnd + 1)) = Wsh.Cells(lngRow, 1).Value
Call Progress_Bar(lngRow)
Next lngRow
Write_Mem_Random_Access = Timer – dblSTimer
End Function
‘===============================================
‘Read Memroy Seqential Access
‘===============================================
Function Read_Mem_SQ_Access()
Dim Wsh As Worksheet
Dim lngRow As Long
Dim dblSTimer As Double
Dim lngMax As Long
Dim strData() As String
dblSTimer = Timer
Set Wsh = GetWorkbook.Worksheets(strGetSheetName)
lngMax = lngGetMaxCount
ReDim strData(lngMax) As String
For lngRow = 1 To lngMax
Wsh.Cells(lngRow, 1).Value = strData(lngRow)
Call Progress_Bar(lngRow)
Next lngRow
Read_Mem_SQ_Access = Timer – dblSTimer
End Function
‘===============================================
‘Read Memroy Random Access
‘===============================================
Function Read_Mem_Random_Access()
Dim Wsh As Worksheet
Dim lngRow As Long
Dim dblSTimer As Double
Dim lngMax As Long
Dim strData() As String
dblSTimer = Timer
Set Wsh = GetWorkbook.Worksheets(strGetSheetName)
lngMax = lngGetMaxCount
ReDim strData(lngMax) As String
For lngRow = 1 To lngMax
Wsh.Cells(lngRow, 1).Value = strData(Int((lngMax – 1 + 1) * Rnd + 1))
Call Progress_Bar(lngRow)
Next lngRow
Read_Mem_Random_Access = Timer – dblSTimer
End Function
‘*************************************************************
‘■■■■CPU■■■■
‘*************************************************************
‘===============================================
‘calculation
‘===============================================
Function Calculation()
Dim Wsh As Worksheet
Dim lngRow As Long
Dim dblSTimer As Double
Dim lngMax As Long
Dim strData As String
Dim dtDate As Date
dblSTimer = Timer
Set Wsh = GetWorkbook.Worksheets(strGetSheetName)
dtDate = #1/1/1999 11:59:59 AM#
lngMax = lngGetMaxCount
For lngRow = 1 To lngMax
strData = VBA.DateValue(dtDate) + VBA.TimeValue(dtDate) + VBA.IIf(1 = 1, 1000, 0)
Call Progress_Bar(lngRow)
Next lngRow
Calculation = Timer – dblSTimer
End Function
もしかしたら付け加えるかもしれないと考えたので、メンテが容易になるように別のモジュールからPropertyプロシージャでループ回数を取得し(ツール2万回にしました)、計測用に書き込むシート名も同様にしました。