Autor Thema: notesdatetime milliseconds  (Gelesen 5630 mal)

Offline pippo

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 580
  • I love YaBB 1G - SP1!
notesdatetime milliseconds
« am: 18.03.14 - 18:18:23 »
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

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: notesdatetime milliseconds
« Antwort #1 am: 18.03.14 - 20:34:04 »
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
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
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline dnotes

  • Aktives Mitglied
  • ***
  • Beiträge: 106
  • Geschlecht: Männlich
Re: notesdatetime milliseconds
« Antwort #2 am: 19.03.14 - 06:21:30 »
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


Offline it898ur

  • Senior Mitglied
  • ****
  • Beiträge: 478
Re: notesdatetime milliseconds
« Antwort #3 am: 19.03.14 - 08:01:05 »
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é

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: notesdatetime milliseconds
« Antwort #4 am: 19.03.14 - 08:43:36 »
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)

Oder noch kürzer, wenn man es als double in LS zum Weiterrechnen braucht:
Code
Set myObjectHeute = jClassHeute.CreateObject
getDateWithMilli = myObjectHeute.getTime()

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

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline pippo

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 580
  • I love YaBB 1G - SP1!
Re: notesdatetime milliseconds
« Antwort #5 am: 19.03.14 - 13:28:16 »
Hallo,
erstmals vielen Dank für die Beiträge

habe das nun in meine Libs vom WS eingebaut
hat auch super funktioniert

nur!
habe dann festgestellt, dass das ganze um ca 1 Sekunde langsamer war...
habe dann die Änderungen wieder zurückgestellt: dann wars wieder schnell

habe dann nur UseLSX "*javacon" gesetzt (ohne weiteren Code...) und es war wieder langsam

wie kann das sein, dass zur Laufzeit das so bremst?

Schönen TAG

Mitch

  • Gast
Re: notesdatetime milliseconds
« Antwort #6 am: 19.03.14 - 14:03:09 »
habe dann nur UseLSX "*javacon" gesetzt (ohne weiteren Code...) und es war wieder langsam

Ich bestätige diese Beobachtung und häng mich hier mal mit dran. Genau das Problem habe ich auch, ebenfalls über einen Webservice. Habe leider keine Lösung dafür, außer eben auf LS2J zu verzichten. Das fiese ist ja, dass die Sekunde Verzögerung echt kommt, sobald man die javacon nur einbindet. Ob man die nutzt ist vollkommen irrelevant.

Für deine Zeit-Messungen könntest du noch mit dem Timer arbeiten:

Code
startticks# = Timer()
... (Code) ...
Print Timer() - startticks#

... allerdings nutze ich das immer nur in Zehntelsekunden, wie genau dass eigentlich ist, weiß ich nicht. Es liefert aber zumindest acht Nachkommastellen zurück. :)

Offline umi

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.062
  • Geschlecht: Männlich
  • one notes to rule'em all, one notes to find'em....
    • Belsoft AG
Re: notesdatetime milliseconds
« Antwort #7 am: 19.03.14 - 14:38:34 »

Von mir auch noch ein Hinweis:

LS2J Calls sind langsam.
Gruß
Roland
Gruss

Urs

<:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Jegliche Schreibfehler sind unpeabischigt
http://www.belsoft.ch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~:>

Mitch

  • Gast
Re: notesdatetime milliseconds
« Antwort #8 am: 19.03.14 - 15:49:29 »

Von mir auch noch ein Hinweis:

LS2J Calls sind langsam.
Gruß
Roland

Darum geht es aber bei letzterem Problem nicht. ;) Es wird langsam bevor überhaupt ein LS2J Call gemacht wird.

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: notesdatetime milliseconds
« Antwort #9 am: 19.03.14 - 18:24:12 »
Wenn dir die Auflösung von 16ms reicht, kannst du ja getthreadinfo...  verwenden.
Gruß Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz