Domino 9 und frühere Versionen > ND8: Entwicklung

notesdatetime milliseconds

(1/2) > >>

pippo:
Hallo,
ich müßte in einem WebService (Script...) bei verschiedenen Punkten die Zeiten messen, und zwar in millisekunden...

habe nichts entsprechendes gefunden :-(

kann es sein, dass man das in Script nicht machen kann

oder hat jemand das vielleicht schon gemacht

bin für jeden Tipp dankbar

Schönen ABEND

pram:
Hallo Pippo,

wir verwenden dafür folgende Funktion:


--- Code: ---Declare Private Function QueryPerformanceFrequency Lib "Kernel32" (X As Currency) As Boolean
Declare Private Function QueryPerformanceCounter Lib "Kernel32" (X As Currency) As Boolean

Public Function getTimeMillis() As Currency
Static startTick As Currency
Static frequency As Currency
Static useHiresCounter As Integer
Dim  currTick As Currency
If startTick = 0 Then
Dim sess As New NotesSession
If InStr(sess.Platform,"Windows") = 0 Then GoTo fail
On Error GoTo fail
QueryPerformanceFrequency frequency
QueryPerformanceCounter startTick
useHiResCounter = True
Exit Function
fail:
startTick = GetThreadInfo(LSI_THREAD_TICKS)
frequency = GetThreadInfo(LSI_THREAD_TICKS_PER_SEC)
useHiResCounter = False
Exit Function
End If
If frequency = 0 Then Exit Function ' avoid div/0
If useHiResCounter Then
QueryPerformanceCounter currTick
Else
currTick = GetThreadInfo(LSI_THREAD_TICKS)
End If
getTimeMillis = (currTick - startTick) * 1000 / frequency
End Function

--- Ende Code ---
Diese liefert 0 ms für den ersten Aufruf und dann die ms für jeden weiteren, ideal zum timen.
Hinweis GetThreadInfo(LSI_THREAD_TICKS) hat unter Windows nur eine Auflösung von 16ms (bei anderen OS ggf. höher), weshalb hier auf die DLL zurückgegriffen wird.

Gruß
Roland

dnotes:
Oder Du benutzt Java.


--- Code: ---UseLSX "*javacon"

Function getDateWithMilli() As String
Dim jSession As Javasession
Set jSession = New JavaSession()
Dim jClassHeute As JAVACLASS
Dim jClassDate As JavaClass
Dim myObjectDate As JavaObject
Dim myObjectHeute As JavaObject

Dim jMethod As JavaMethod
Set jClassDate = jSession.Getclass("java/text/SimpleDateFormat")
Set jClassHeute = jSession.Getclass("java/util/Date")
Set myObjectHeute = jClassHeute.CreateObject
Set myObjectDate = jClassDate.CreateObject("(Ljava/lang/String;)V", "yyyy-MM-dd HH:mm:ss.S")
getDateWithMilli = myObjectDate.format(myObjectHeute)
End Function


--- Ende Code ---

it898ur:
Und nur als Hinweis ...

Vorsicht beim Umgang mit 32bit Windows APIs und 64 Bit Notes-Servern (wir haben das in einem periodischen Agenten benötigt) !

Die Java-Variante läuft dafür aber auch über die LS to Java Schnittstelle und kann in LS-Code mit verwendet werden.

Gruß

André

pram:
Ja, der Hinweis auf 64 Bit ist durchaus berechtigt. Bisher haben wir das nur in Debug Code und hauptsächlich am Client eingesetzt.

Von mir auch noch ein Hinweis:
LS2J Calls sind langsam. Da in der Java-Variante sehr viel gemacht wird, könnte ich mir vorstellen, dass diese das Messergebnis stark verfälscht.
Ich würde mir alle Objekte zwischenspeichern, so dass letztendlich nur noch folgender Code ausgeführt wird

--- Code: ---Set myObjectHeute = jClassHeute.CreateObject
Set myObjectDate = jClassDate.CreateObject("(Ljava/lang/String;)V", "yyyy-MM-dd HH:mm:ss.S")
getDateWithMilli = myObjectDate.format(myObjectHeute)

--- Ende Code ---

Oder noch kürzer, wenn man es als double in LS zum Weiterrechnen braucht:

--- Code: ---Set myObjectHeute = jClassHeute.CreateObject
getDateWithMilli = myObjectHeute.getTime()

--- Ende Code ---

Werd evtl meine Methode so auch noch 64 bit fähig machen :)

Gruß
Roland

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln