Velocidad de lectura en todos los productos #53
-
Utilizando tu ejemplo de consola del sdk normal logre una lectura de 3000 productos en un tiempo aprox. de 55 segs. Pero al utilizar el Sdk.Extras la tarea se vuelve muchísimo más lenta. Pensé que había un error y se quedaba colgada simplemente con el sample de consola, pero al abrir el sample de WPF y ver como cargaban de 1 en 1 note que es demasiado lento, aproximadamente 3 productos por segundo. 1.- ¿Hay alguna razón para ello? 2.- ¿Hay alguna forma de hacer "bulk" de datos aún más rápido?, Necesito llenar una bd en la nube con la info de los productos para un PoS en línea, el problema es que me gustaría hacer una tarea asyncrona/background que revise si se ha ingresado un nuevo producto en almacén y hacer sync con la BD en la nube automáticamente de ser posible o cada cierto tiempo con un cron job. Hay alguna estrategia para ello además de LeerTodo() y comparar "manualmente" ? (soy un poco nuevo con Contpaq en general). |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments
-
Adjunto lectura de 422 clientes con su duración. Estoy pensando en hacer refactor y utilizar la estrategia del SDK normal, pero subo esto para ver si se debe a algún bug de la estrategia en el SDK.Extras. |
Beta Was this translation helpful? Give feedback.
-
La diferencia entre los dos ejemplos es el modelo. En los ejemplos de Sdk.ConsoleApp cree la clase Las consultas por SDK son lentas. Yo te recomendaría hacer las consultas directamente a la base de datos por SQL. Puedes utilizar la librería ARSoftware.Contpaqi.Comercial.Sql si sabes utilizar EntityFramework. Si prefieres seguir utilizando el SDK lo que puedes hacer es crear un modelo con solo los campos que necesitas y utilizar el repositorio ProductoRepository que es generico. El unico requerimiento es que tus campos deben tener el mismo nombre que los de la base de datos. Puedes usar la clase Por ejemplo, el ejemplo del SDK utilizando la libreria de Sdk.Extras: using ARSoftware.Contpaqi.Comercial.Sdk.Extras;
using ARSoftware.Contpaqi.Comercial.Sdk.Extras.Repositories;
namespace Sdk.Extras.ConsoleApp.Catalogos;
/// <summary>
/// Modelo solo con los datos necesarios.
/// </summary>
public class ProductoDto
{
public int CIDPRODUCTO { get; set; }
public string CCODIGOPRODUCTO { get; set; }
public string CNOMBREPRODUCTO { get; set; }
public int CTIPOPRODUCTO { get; set; }
/// <summary>
/// Ejemplo de como usar el repositorio de productos con un modelo de datos personalizado.
/// </summary>
/// <returns>Regresa la lista de productos.</returns>
public IEnumerable<ProductoDto> BuscarTodo()
{
var productoRepository = new ProductoRepository<ProductoDto>(new ComercialSdkExtended());
return productoRepository.TraerTodo().ToList();
}
} Creando un nuevo modelo puedes gozar de los beneficios de los repositorios que ya tienen la lógica de búsqueda.
Utilizando el SDK no. Ya que la lógica de búsqueda con SDK es de 1 por 1. Como te explique, creando un modelo solo con los campos que necesitas seria más rápido, pero no más rápido que si lo hicieras con SQL. |
Beta Was this translation helpful? Give feedback.
La diferencia entre los dos ejemplos es el modelo. En los ejemplos de Sdk.ConsoleApp cree la clase
ProductoSdk
que solo tiene 4 campos a buscar. En los ejemplos de Sdk.Extras.ConsoleApp utilizamos el modeloProducto
de la librería Sdk.Extras que representa la estructura de la base de datos que tiene mas de 100 campos. En pocas palabras te esta trayendo todo y por eso es mas…