Lentitud en TDbfBrowse:Refresh()
Publicado: Mar Ene 20, 2015 8:09 pm
Hola!
Soy nuevo con Xailer, aunque vengo de 5win, así que no se me ha complicado mucho entenderle, con toda la ayuda que he encontrado en el foro y las estupendas notas de mi amigo y maestro René Flores ha sido un parto sin mucho dolor (hasta ahora), no sé como no migré antes, Xailer con Harbour es una verdadera maravilla.
Pero tengo el siguiente problema:
Al utilizar TDbfBrowse con una base ntx, en red compartida, el refresco es lentísimo, de 6 a 20 segundos, al principio pensé que eran los índices ntx, pero después de muchas pruebas decidí hacer una búsqueda incremental con :OnChar y haciendo DbSeek directamente en lugar de :seek.
Medí los tiempos, y el DbSeek es rapidísimo, el tardado es el :Refresh(), pero por ejemplo en un :GoBottom(), el refresco es muy rápido.
Algo hace el refresh que no logro identificar.
Por el momento esta aplicación no la puedo migrar a CDX por que no tengo los fuentes.
Tabla DBF con 2 índices NTX
100 mil registros
5 TDbfBrwColumns
Browse sin scrolls.
Aquí dejo el comparativo de tiempos con milisegundos (mS)
El DbSeek está postergado a 333 milisegundos después del útimo teclazo con un timer
En red, pero sin nadie más ocupando la tabla.
#1: Abriendo DirEmpr 10:38:33.3878 <- Abre la tabla con 2 índices
#2: indices a 0 10:38:33.3908 <- OrdSetFocus a 0
#3: :SetDBF 10:38:33.3908 <- Le pongo le pongo alias al Browse
#4: antes de OrdSetFocus a: 2 10:38:33.3940 <- ahora sí, activo el indice 2
#5: después de OrdSetFocus a: 2 10:38:33.3940 <- no tardó nada en activarlo
#6: DbSeek: 'v' 10:38:34.4984 <--Antes del DbSeek
#7: .T. 10:38:34.4994 <- tardó 10 mS en encotrarlo en el indice
#8: DbSeek: 'vi' 10:38:35.5134
#9: .T. 10:38:35.5144
#10: DbSeek: 'vit' 10:38:35.5246
#11: .T. 10:38:35.5256
#12: DbSeek: 'vita' 10:38:35.5448
#13: .T. 10:38:35.5448
#14: DbSeek: 'vital' 10:38:35.5510
#15: .T. 10:38:35.5510
#16: DbSeek: 'vitali' 10:38:35.5686
#17: .T. 10:38:35.5696
#18: DbSeek: 'vitalin' 10:38:35.5823
#19: .T. 10:38:35.5834
#20: DbSeek: 'vitalini' 10:38:35.5942 <- aquí pulsé la última tecla
#21: .T. 10:38:35.5943 <- encontró la palabra conpleta en 11 mS
#22: antes de :Refresh 10:38:36.6280 <- aquí se activa el Timer 338 ms después del último teclazo y llama al refresh()
#23: después de :Refresh 10:38:37.7405 <- Regresó del Refresh() tardó más de 1 segundo (1.1125mS)
#24: antes de :GoBottom() 10:38:40.0010 <- aquí mando un browse:GoBottom()
#25: después de :GoBottom() 10:38:40.0021 <- y sólo tardó 10 mS en ir al final y refrescar completamente el Browse
En red con otra persona ocupando la tabla
#1: Abriendo DirEmpr 10:39:29.9854
#2: indices a 0 10:39:29.9884
#3: :SetDBF 10:39:29.9884
#4: antes de OrdSetFocus a: 2 10:39:29.9930
#5: después de OrdSetFocus a: 2 10:39:29.9930
#6: DbSeek: 'v' 10:39:30.0685
#7: .T. 10:39:30.0705
#8: DbSeek: 'vi' 10:39:30.0865
#9: .T. 10:39:30.0875
#10: DbSeek: 'vit' 10:39:30.0959
#11: .T. 10:39:30.0969
#12: DbSeek: 'vita' 10:39:31.1160
#13: .T. 10:39:31.1171
#14: DbSeek: 'vital' 10:39:31.1258
#15: .T. 10:39:31.1258
#16: DbSeek: 'vitali' 10:39:31.1438
#17: .T. 10:39:31.1438
#18: DbSeek: 'vitalin' 10:39:31.1569
#19: .T. 10:39:31.1569
#20: DbSeek: 'vitalini' 10:39:31.1690 <- aquí pulsé la última tecla
#21: .T. 10:39:31.1700 <- los mismos 10mS en encontrar
#22: antes de :Refresh 10:39:32.2032 <- aquí se activa el Timer 342ms después del último teclazo y llama al refresh()
#23: después de :Refresh 10:39:44.4389 <- ¡Más de 12 segundos en hacer el refresh()!
#24: antes de :GoBottom() 10:39:45.5390 <- aquí mando un browse:GoBottom()
#25: después de :GoBottom() 10:39:45.5408 <- y sólo tardó ¡18mS! en ir al final y refrescar completamente el Browse
Ojalá me puedan ayudar, resolviendo esto, podré empezar a migrar la aplicación.
Ya intenté con Super:Refresh() para llamarlo de una clase superior y sigue igual.
Soy nuevo con Xailer, aunque vengo de 5win, así que no se me ha complicado mucho entenderle, con toda la ayuda que he encontrado en el foro y las estupendas notas de mi amigo y maestro René Flores ha sido un parto sin mucho dolor (hasta ahora), no sé como no migré antes, Xailer con Harbour es una verdadera maravilla.
Pero tengo el siguiente problema:
Al utilizar TDbfBrowse con una base ntx, en red compartida, el refresco es lentísimo, de 6 a 20 segundos, al principio pensé que eran los índices ntx, pero después de muchas pruebas decidí hacer una búsqueda incremental con :OnChar y haciendo DbSeek directamente en lugar de :seek.
Medí los tiempos, y el DbSeek es rapidísimo, el tardado es el :Refresh(), pero por ejemplo en un :GoBottom(), el refresco es muy rápido.
Algo hace el refresh que no logro identificar.
Por el momento esta aplicación no la puedo migrar a CDX por que no tengo los fuentes.
Tabla DBF con 2 índices NTX
100 mil registros
5 TDbfBrwColumns
Browse sin scrolls.
Aquí dejo el comparativo de tiempos con milisegundos (mS)
El DbSeek está postergado a 333 milisegundos después del útimo teclazo con un timer
En red, pero sin nadie más ocupando la tabla.
#1: Abriendo DirEmpr 10:38:33.3878 <- Abre la tabla con 2 índices
#2: indices a 0 10:38:33.3908 <- OrdSetFocus a 0
#3: :SetDBF 10:38:33.3908 <- Le pongo le pongo alias al Browse
#4: antes de OrdSetFocus a: 2 10:38:33.3940 <- ahora sí, activo el indice 2
#5: después de OrdSetFocus a: 2 10:38:33.3940 <- no tardó nada en activarlo
#6: DbSeek: 'v' 10:38:34.4984 <--Antes del DbSeek
#7: .T. 10:38:34.4994 <- tardó 10 mS en encotrarlo en el indice
#8: DbSeek: 'vi' 10:38:35.5134
#9: .T. 10:38:35.5144
#10: DbSeek: 'vit' 10:38:35.5246
#11: .T. 10:38:35.5256
#12: DbSeek: 'vita' 10:38:35.5448
#13: .T. 10:38:35.5448
#14: DbSeek: 'vital' 10:38:35.5510
#15: .T. 10:38:35.5510
#16: DbSeek: 'vitali' 10:38:35.5686
#17: .T. 10:38:35.5696
#18: DbSeek: 'vitalin' 10:38:35.5823
#19: .T. 10:38:35.5834
#20: DbSeek: 'vitalini' 10:38:35.5942 <- aquí pulsé la última tecla
#21: .T. 10:38:35.5943 <- encontró la palabra conpleta en 11 mS
#22: antes de :Refresh 10:38:36.6280 <- aquí se activa el Timer 338 ms después del último teclazo y llama al refresh()
#23: después de :Refresh 10:38:37.7405 <- Regresó del Refresh() tardó más de 1 segundo (1.1125mS)
#24: antes de :GoBottom() 10:38:40.0010 <- aquí mando un browse:GoBottom()
#25: después de :GoBottom() 10:38:40.0021 <- y sólo tardó 10 mS en ir al final y refrescar completamente el Browse
En red con otra persona ocupando la tabla
#1: Abriendo DirEmpr 10:39:29.9854
#2: indices a 0 10:39:29.9884
#3: :SetDBF 10:39:29.9884
#4: antes de OrdSetFocus a: 2 10:39:29.9930
#5: después de OrdSetFocus a: 2 10:39:29.9930
#6: DbSeek: 'v' 10:39:30.0685
#7: .T. 10:39:30.0705
#8: DbSeek: 'vi' 10:39:30.0865
#9: .T. 10:39:30.0875
#10: DbSeek: 'vit' 10:39:30.0959
#11: .T. 10:39:30.0969
#12: DbSeek: 'vita' 10:39:31.1160
#13: .T. 10:39:31.1171
#14: DbSeek: 'vital' 10:39:31.1258
#15: .T. 10:39:31.1258
#16: DbSeek: 'vitali' 10:39:31.1438
#17: .T. 10:39:31.1438
#18: DbSeek: 'vitalin' 10:39:31.1569
#19: .T. 10:39:31.1569
#20: DbSeek: 'vitalini' 10:39:31.1690 <- aquí pulsé la última tecla
#21: .T. 10:39:31.1700 <- los mismos 10mS en encontrar
#22: antes de :Refresh 10:39:32.2032 <- aquí se activa el Timer 342ms después del último teclazo y llama al refresh()
#23: después de :Refresh 10:39:44.4389 <- ¡Más de 12 segundos en hacer el refresh()!
#24: antes de :GoBottom() 10:39:45.5390 <- aquí mando un browse:GoBottom()
#25: después de :GoBottom() 10:39:45.5408 <- y sólo tardó ¡18mS! en ir al final y refrescar completamente el Browse
Ojalá me puedan ayudar, resolviendo esto, podré empezar a migrar la aplicación.
Ya intenté con Super:Refresh() para llamarlo de una clase superior y sigue igual.