D
Dragon108
Какие есть функции (и вообще есть ли они) для засекания времени выполнения скрипта?
Заранее спасибо.
Заранее спасибо.
Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе
Dim startTic As Long
Dim seconds As Double
startTic = Getthreadinfo(6)
' your code goes here
seconds = (Getthreadinfo(6) - startTic) / Getthreadinfo(7)
Print "Finished. The code ran for " & Format$(seconds, "##0.00") & " seconds."
а точность не смущает?а Timer() не проще использовать?
Dim dtStart As New NotesDateTime("")
Dim dtEnd As New NotesDateTime("")
Call dtStart.SetNow
'... Код
Call dtEnd.SetNow
Declare Function GetTickCount Lib "kernel32" () As Long
d=GetTickCount
For i=1 To 1000
Print d
Next
Print Cstr(GetTickCount-d)
не всегда нужен весь код, чаще - его куски, особливо - время кажного цикла (буде таковые имеются)
package org.performance;
import java.util.*;
public class Timer {
private String[] rows;
private ArrayList elapsed=new ArrayList();
private long max=0;
private long min=0;
private long sum=0;
private int count=-1;
private long last=0;
final short STATUS_STOPPED=0;
final short STATUS_STARTED=1;
final short STATUS_PAUSED=2;
private short status=STATUS_STOPPED;
private boolean nodetailsFlag=false;
private final String[] template={"Кол-во:",";суммарно:",";максимально:",";минимально:",";среднее:"};
public Timer(){
}
public void start(){
switch (status) {
case STATUS_STOPPED:
elapsed.clear();
count=-1;
sum=0;
case STATUS_PAUSED:
last=System.currentTimeMillis();
if (!nodetailsFlag) {
elapsed.add(new Long(last));
}
count+=1;
status=STATUS_STARTED;
}
}
public void setNoDetails(boolean nodetails){
nodetailsFlag=nodetails;
}
public void pause(){
if (status==STATUS_STARTED) {
long l=System.currentTimeMillis() - last;
max = ((l > max) ? l : max);
min=((min==0) ? l : ((l<min) ? l : min));
sum+=l;
if (!nodetailsFlag) {
elapsed.set(count,new Long(l));
if (count>0) {elapsed.set(count-1,((Long)elapsed.get(count-1)).toString());} //преобразование в строку предыдущего значения
}
status=STATUS_PAUSED;
}
}
public String[] getDetails(){
// if (1==1) {return new String[]{"1","2"};}
if (nodetailsFlag){return new String[]{};}
switch (status) {
case STATUS_STOPPED:
rows=new String[elapsed.size()];
elapsed.toArray(rows);
System.out.println("size:"+elapsed.size()+";first:" + rows[0]);
return rows;
}
return new String[]{};
}
public String stop(){
switch (status) {
case STATUS_STARTED:pause();
case STATUS_PAUSED:
if (!nodetailsFlag) {
elapsed.set(count,((Long)elapsed.get(count)).toString()); //преобразование в строку
}
break;
default: return "";
}
status=STATUS_STOPPED;
StringBuffer sb=new StringBuffer();
//суммарные параметры
int c=count+1;
Double avg= new Double((new Long(sum)).doubleValue()/c);
sb.append(template[0]);sb.append(new Integer(c));
sb.append(template[1]);sb.append(new Long(sum));
sb.append(template[2]);sb.append(new Long(max));
sb.append(template[3]);sb.append(new Long(min));
sb.append(template[4]);sb.append(avg);
return sb.toString();
}
}
Option Public
Option Declare
Use "ErrorHandling"
Uselsx "*lsxlc"
Use "Performance"
Const ERRBASE_PERFORMANCE=1100
Const ERRLS2JINIT=ERRBASE_PERFORMANCE+1, CS_ERRLS2JINIT={ошибка инициализации класса Java}
Class Performance As ErrorHandlerWJ
Private PerformanceObj As JavaObject
Private PerformanceClass As JavaClass
Private perfName As String
Private noDetails As Boolean
Sub New(xName As String, woDetails As Boolean)
Dim fail As Boolean
On Error Goto errorhandler
Set PerformanceClass = jSession.GetClass("org.performance.Timer")
Set PerformanceObj = PerformanceClass.CreateObject
perfName=xName
If woDetails Then
Call PerformanceObj.setNoDetails(woDetails)
noDetails=woDetails
End If
ExitFunction:
If fail Then
On Error Goto 0
Error ERRLS2JINIT, CS_ERRLS2JINIT
End If
Exit Sub
errorhandler:
Call Me.RaiseError()
fail=True
Resume ExitFunction
End Sub
'********************************
Sub Delete()
If Not PerformanceObj Is Nothing Then
Delete PerformanceObj
End If
End Sub
'********************************
Sub StartT()
On Error Goto errorhandler
Call PerformanceObj.start()
ExitFunction:
Exit Sub
errorhandler:
Call Me.RaiseError()
Resume ExitFunction
End Sub
'********************************
Sub PauseT()
On Error Goto errorhandler
Call PerformanceObj.pause()
ExitFunction:
Exit Sub
errorhandler:
Call Me.RaiseError()
Resume ExitFunction
End Sub
'********************************
Function StopT() As String
On Error Goto errorhandler
StopT = "Показатель "& perfName & {>} & PerformanceObj.stop()
ExitFunction:
Exit Function
errorhandler:
Call Me.RaiseError()
Resume ExitFunction
End Function
'********************************
Function GetDetails() As Variant
On Error Goto errorhandler
If Not noDetails Then
GetDetails=PerformanceObj.getDetails()
End If
ExitFunction:
Exit Function
errorhandler:
Call Me.RaiseError()
Resume ExitFunction
End Function
End Class
пока хватало )а точность не смущает?
' вместо Declare Function GetTickCount Lib "kernel32" () As Long:
Uselsx "*javacon"
Function getCurrentTimeMillis() As Double
Dim jsession As New JavaSession
getCurrentTimeMillis = jsession.getClass("java.lang.System").currentTimeMillis()
End Function
' Usage:
Sub Click(Source As Button)
Dim startTic As Double
Dim seconds As Double
startTic = getCurrentTimeMillis()
' your code goes here
seconds = ( getCurrentTimeMillis() - startTic)/1000
Print "Finished. The code ran for " & Format$(seconds, "##0.00") & " seconds."
End Sub
на каждого нелюбителя винды и т.п. найдется любитель. и они будут любить друг другу моск до скончания вековесть подходы, кот. у меня вызывают недоумение и неприятие
Число возвращаемое Timer является дробным (Single). Про точность в хелпе сказано строчкой ниже.а точность не смущает?
Обучение наступательной кибербезопасности в игровой форме. Начать игру!