Identificador único universal - Versión para impresión +- Comunidad Gambas-es (https://gambas-es.org) +-- Foro: Gambas (https://gambas-es.org/forum-3.html) +--- Foro: Aplicaciones/Fragmentos de Código (https://gambas-es.org/forum-8.html) +--- Tema: Identificador único universal (/thread-1355.html) |
RE: Identificador único universal - Shordi - 13-05-2023 Tan solo unas pequeñas precisiones sobre mi algoritmo: Código: Private Sub getkey() As String 1- El format con los años primeros, perfecto, permite ordenar claves (Aunque esto me recuerda a lo que siempre me decía el alemán con quien colaboré sobre el cliente FTP: "¡Pero eso no estaba en las condiciones del proyecto!" y a lo que yo respondía "Sin improvisación no es divertido"...) 2- El lugar "natural" de GetKey es dentro de un módulo, de manera que sea accesible desde cualquier parte del proyecto donde se use. Por tanto la función debe devolver el valor para que sea recogido y aplicado en la clase desde donde se le llame. 2- Se declara STATIC nkey para que una vez se establezca el valor, la secuencia continue ininterrumpida a todo lo largo de la sesión del proyecto que use la función. Dicha secuencia es resetada cada 99999 claves generadas en la sesión y lo limité el offset a eso por no hacer la clave muy larga... pero visto la longitud de las claves de los otros algoritmos, pues se puede ampliar todo lo que se quiera. En el retoque de Tincho también se declaran STATIC LastKey (útima clave generada) y sCurrKeyTkey (Control de timestamp duplicados) y se resetea el offset cada cambio de éste último. Es otra forma de hacerlo totalmente válida, por supuesto, pero de cuya utilidad no estoy muy seguro. Respecto a los Tests propuesto por Tincho, observo que a medida que crece el array de claves se enlentece el proceso, claro. Por tanto, una vez que estamos seguros que la función getkey funciona perfectamente y no es necesaria ninguna comprobación, si cambiamos el código a ésto: Código: Public Sub Button2_Click() La velocidad de generación pasa de más o menos 20.000 por segundo y disminuyendo... a 1.350.000 por segundo de manera constante. Si eliminamos la necesidad de que todas las claves sean iguales de largas, es decir: Código: Private Sub getkey() As String Entonces la velocidad de generación de claves únicas asciende por encima de 1.500.000 por segundo, suficiente para TercoIde, supongo . Adjunto un proyectito que muestra esto: Saludos RE: Identificador único universal - tincho - 13-05-2023 (13-05-2023, 11:48)Shordi escribió: En el retoque de Tincho también se declaran STATIC LastKey (útima clave generada) y sCurrKeyTkey (Control de timestamp duplicados) y se resetea el offset cada cambio de éste último. Es otra forma de hacerlo totalmente válida, por supuesto, pero de cuya utilidad no estoy muy seguro. Es para controlar la cantidad de nkey, ya que si la fecha cambia no tiene ningún sentido que nKey continúe aumentando, me parece mas prolijo y ordenado que cada vez que cambie la marca temporal este tenga un nKey = 0. Pero si la velocidad es la prioridad el método sin ninguna comprobación es el mejor. RE: Identificador único universal - tincho - 14-05-2023 Vuott paso un código en la lista de correo que usa la librería estándar libc. Tome ese código y lo adapte un poco para usarlo como función, el rendimiento es excelente solo el doble de tiempo que el ID de Shordi . Código: ' Gambas class file |