#TUNING by stefan
authorStefan Vogel <sv@exept.de>
Tue, 19 Apr 2016 14:57:11 +0200
changeset 3807 92abd3d375d0
parent 3805 9cb0780df5fc
child 3808 28e8efebcd0a
child 3809 c87f8b4f907c
#TUNING by stefan class: UUID class definition added: #fromString: changed: #initialize cache symbolic UUIDs
UUID.st
--- a/UUID.st	Thu Apr 14 12:53:36 2016 +0200
+++ b/UUID.st	Tue Apr 19 14:57:11 2016 +0200
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
 "
  COPYRIGHT (c) 2002 by eXept Software AG
               All Rights Reserved
@@ -18,7 +16,7 @@
 ByteArray variableByteSubclass:#UUID
 	instanceVariableNames:''
 	classVariableNames:'CachedMACAddress Lock SequenceNumber LastTime Increment
-		NameSpaceToUuidBytes'
+		NameSpaceToUuidBytes CachedUuidsBySymbol'
 	poolDictionaries:''
 	category:'Net-Communication-Support'
 !
@@ -74,6 +72,7 @@
         Lock := RecursionLock new name:#UUID.
         LastTime := 0.
         Increment := 0.
+        CachedUuidsBySymbol := IdentityDictionary new.
     ]
 !
 
@@ -198,6 +197,43 @@
     "
 !
 
+fromString:aStringOrSymbol
+    "convert aStringOrSymbol to a UUID. 
+     If aStringOrSymbol is a symbol, cache this UUID for faster conversion.
+
+     The real conversion is done in #readFrom:onError."
+
+    |isSymbol uuid|
+
+    isSymbol := aStringOrSymbol isSymbol.
+    isSymbol ifTrue:[
+        uuid := CachedUuidsBySymbol at:aStringOrSymbol ifAbsent:[].
+        uuid notNil ifTrue:[^ uuid].
+    ].
+    uuid := self readFrom:aStringOrSymbol readStream.
+    isSymbol ifTrue:[
+        CachedUuidsBySymbol at:aStringOrSymbol put:uuid.
+    ].
+    ^ uuid.
+
+    "
+        UUID fromString:'be1ef7a0-ae1d-11e0-9cb5-02ff7d4f61ea'
+        UUID fromString:#'be1ef7a0-ae1d-11e0-9cb5-02ff7d4f61ea'
+
+        Time millisecondsToRun:[
+            100000 timesRepeat:[
+                UUID fromString:'be1ef7a0-ae1d-11e0-9cb5-02ff7d4f61ea'.
+            ]
+        ]
+
+        Time millisecondsToRun:[
+            100000 timesRepeat:[
+                UUID fromString:#'be1ef7a0-ae1d-11e0-9cb5-02ff7d4f61ea'.
+            ]
+        ]
+    "
+!
+
 genRandomUUID
     "generate a new random UUID"
 
@@ -432,6 +468,7 @@
     "Modified: / 17-11-2004 / 01:45:53 / cg"
 ! !
 
+
 !UUID methodsFor:'accessing'!
 
 clockSeqHiAndReserved