Foros del Web » Programación para mayores de 30 ;) » .NET »

Será óptimo esto que estoy haciendo?

Estas en el tema de Será óptimo esto que estoy haciendo? en el foro de .NET en Foros del Web. Hola a todos, estoy haciendo un carro de compras que por suerte ya termine su funcionalidad más importante y funciona correctamente. Al principio lo habia ...
  #1 (permalink)  
Antiguo 13/06/2005, 22:46
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Será óptimo esto que estoy haciendo?

Hola a todos, estoy haciendo un carro de compras que por suerte ya termine su funcionalidad más importante y funciona correctamente. Al principio lo habia comenzado a hacer con un hashtable, complicandome bastante la vida, pero ahora lo hice a través de Datatable. Mi duda es la siguiente: el código funciona bien, pero es óptimo hacerlo a través de un DataTable?, sinceramente me asusta el hecho de que tanta cantidad de datos vayan a quedar momentamente en la memoria del servidor. Cada DataTable tiene 5 columnas (Cantidad, Nombre, Id, SubTotal, Costo unitario). Si tengo en cuenta que por cada usuario que esté comprando se va a crear un DataTable, y si a eso le sumamos la sesion que contendrá dicha Datatable, la verdad que dudo mucho si será efectivo, por eso me interesaría saber si han tenido alguna experiencia haciendo un carro de compras mediante Datatable y como les fue, y sino la han tenido, me gustaría saber que piensan.
Un saludo y muchas gracias.
  #2 (permalink)  
Antiguo 13/06/2005, 23:44
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 6 meses
Puntos: 8
En un principio no tienes porque tener problemas, no se cual es la cantidad de usuarios estimados de conexión simultanea que esperas, pero ya te digo que pongamos (40 o 50) no deberías tener ningún problemas. Si te asusta mucho, siempre puedes crear una tabla en tu BD para guardar esos registros de forma temporal, pero yo lo haría con el DataTable.

Un saludo
  #3 (permalink)  
Antiguo 14/06/2005, 09:26
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Hola, si exactamente eso es lo estimativo, y al principio que salga la página obviamente serán menos, así que me puedo quedar un poco más tranquilo.
Gracias Jose_Minglein2, un saludo!.
  #4 (permalink)  
Antiguo 14/06/2005, 11:54
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 3 meses
Puntos: 50
Estoy de acuedo con Jose_minglein2, la cantidad de informacion que pretendes guardar no es mucha... solo que verifica que cuando termines de ocupar la session luego luego la liberes..

Otra opcion para no consumir recursos es guardar la info de las compras del usuario en una cookie... (tomando en cuenta que algunos browsers no las aceptan. pero son muy contados)

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #5 (permalink)  
Antiguo 14/06/2005, 12:55
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Si, voy a tomar ese recaudo, pero por ejemplo yo en ASP 3.0 la sesion era liberada con SET session("ShoppingCart") = Nothing o sino session.Abandon, pero en Asp.Net tengo entendido que eso no asegura que sean liberados inmediatamente los recursos, sino que el momento en que se liberen será determinado por el Garbage Collector (o algo así, la verdad que no recuerdo en este momento el nombre). Puede ser o entendí mal?.
Saludos y gracias!.
  #6 (permalink)  
Antiguo 14/06/2005, 14:56
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 3 meses
Puntos: 50
Cita:
Iniciado por mariano_donati
pero en Asp.Net tengo entendido que eso no asegura que sean liberados inmediatamente los recursos, sino que el momento en que se liberen será determinado por el Garbage Collector (o algo así, la verdad que no recuerdo en este momento el nombre).
De hecho el GC (garbage collector) se encargar de recoger los "objetos" que ya no se están utlizando, por ejemplo.. en lenguajes como c++, java, etc tu cuando creas un objetos haces el constructor y su corrspondiente destructor, ahora en .Net el trabajo del GC sería de del destructor, es decir.. el programador ya no se tiene que preocupar por liberar los objetos claro que uno mismo puede hacer el dispose para liberarlo inmediatamente...

En cuanto a la session en asp.net tambien lo puedes hacer usando Session.RemoveAll() para todos, Session.Remove("obj") para uno en especifico o hacer un Session("obj") = Nothing (vb.net) o Session("obj") = null (c#)

Salu2
  #7 (permalink)  
Antiguo 14/06/2005, 18:17
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
Cita:
Iniciado por RootK
De hecho el GC (garbage collector) se encargar de recoger los "objetos" que ya no se están utlizando, por ejemplo.. en lenguajes como c++, java, etc tu cuando creas un objetos haces el constructor y su corrspondiente destructor
Hasta donde sé desde la primera versión del JDK (java) está presente el concepto de Garbage Collection y no existen "destructores" como tal; es un esquema parecido al que se tiene en .Net

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #8 (permalink)  
Antiguo 14/06/2005, 21:30
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
Ahora voy entendiendo esto del GC, me queda una duda. Si el GC todavía no ha decidido eliminar, es porque realmente resulta innecesario en ese momento hacerlo, ya que mantener los objetos todavía no afectaría a los recursos del servidor significativamente? o tiene un límite ya prestablecido que es cuando comienza a eliminar los objetos, independientemente de si están mermando o no los recursos del servidor?. En fin, la pregunta sería, me recomiendan confiar en el GC o siempre es conveniente hacerlo manualmente?.
Saludos.
Suerte y muchas gracias!.
  #9 (permalink)  
Antiguo 14/06/2005, 23:14
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 19 años, 4 meses
Puntos: 7
El comportamiento del GC es no determinístico (obviamente influyen factores como los que mencionas), el hecho de que hagas "Obj = Nothing" no indica que ese momento el GC entre en funcionamiento y haga la "limpieza" de los objetos que ya no tienen referencias, estos permanecerán en el heap hasta que el GC entre en funcionamiento, puedes forzarlo con GC.Collect, no es muy usual hacer eso: comentarios al respecto y esto es lo que dice el libro del que comento más abajo.
Cita:
Avoid Calling GC.Collect

The default GC.Collect method causes a full collection of all generations. Full collections are expensive because literally every live object in the system must be visited to ensure complete collection. Needless to say, exhaustively visiting all live objects could, and usually does, take a significant amount of time. The garbage collector's algorithm is tuned so that it does full collections only when it is likely to be worth the expense of doing so. As a result, do not call GC.Collect directly — let the garbage collector determine when it needs to run.

The garbage collector is designed to be self-tuning and it adjusts its operation to meet the needs of your application based on memory pressure. Programmatically forcing collection can hinder tuning and operation of the garbage collector.
Por otro lado, ten en cuenta que el GC no actúa sobre objetos no manejados (acceso a ficheros, acceso a recursos de red, conexiones a base de datos, etc), en ese caso tienes que liberar los recursos manualmente.

Puedes ver el funcionamiento del GC en una animación, descargas el archivo "Día 06 y 07", dentro del archivo compreso hay otro con el nombre "GarbageCollect.zip".
http://www.buayacorp.com/vb.net/

Viendo que te preocupa lo del rendimiento de tus aplicaciones, te recomiendo la lectura del siguiente libro (disponible gratuitamente en formato pdf):
http://msdn.microsoft.com/library/de...l/scalenet.asp
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #10 (permalink)  
Antiguo 15/06/2005, 08:15
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 1 mes
Puntos: 9
perfecto, excelente lo añadido xknown, muy buenos links realmente, muchas gracias.
Una pregunta, supongamos que en la variable conexion tengo el objeto de conexion a la base de datos, para liberarlo bastaría con igualar la variable a NOTHING?
El segundo link era justamente lo que estaba buscando y que hacia tiempo no podia encontrar por ningún lado.
Nuevamente, muchas gracias!.
Suerte!.
  #11 (permalink)  
Antiguo 15/06/2005, 08:39
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 3 meses
Puntos: 50
Cita:
Iniciado por xknown
Hasta donde sé desde la primera versión del JDK (java) está presente el concepto de Garbage Collection y no existen "destructores" como tal;
Tienes razón friend.. me confundí un poco al mencionar a java.. ya que precisamente tiene su propio GC y sus métodos manuales para hacer la liberacion de los objetos, mas bien a lo que quería mencionar es que .Net se basó en algunas filosofías que manaja Java como el GC.

Cita:
Iniciado por mariano_donati
que en la variable conexion tengo el objeto de conexion a la base de datos, para liberarlo bastaría con igualar la variable a NOTHING?
Mas bien lo que se hace por lo regular es asegurarse de cerrar la conexion y dejar a nuestro GC que libere el objeto cuando sea necesario, ya que posiblemente ese objeto conexion lo ocupes en otro lado y no tendría caso hacer un Nothing, claro que podría en dado caso hacer una implementacion del Dispose para cerrar tu conexion..

ejemplo con vb.net
Cita:
Public Class PhotoManager
Implements IDisposable
...
Overridable Sub Dispose() Implements System.IDisposable.Dispose
connection.Close()
End Sub
...

en el caso de C# lo puedes hacer tambien de la siguiente forma para asegurarte de liberar tu objeto

Cita:
using ( SqlConnection connection = new SqlConnection( ConfigurationManager.ConnectionStrings[ "connectionString" ].ConnectionString ) )
{
...
}
Salu2
  #12 (permalink)  
Antiguo 26/11/2008, 20:55
 
Fecha de Ingreso: noviembre-2008
Mensajes: 2
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Será óptimo esto que estoy haciendo?

1. Las 20 chicas y los 10 chicos de un curso de COU organizan un viaje, para el cual necesitan dinero. Deciden pedir trabajo por las tardes en una compañía encuestadora que contrata a equipos jóvenes de dos tipos:

• TIPO A: Parejas: una chica y un chico
• TIPO B: Equipos de cuatro, formados por tres chicas y un chico

Se paga a 30000 pesos. la tarde a la pareja y a 50000 pesos. La tarde al equipo de 4. ¿Cómo les conviene distribuirse para sacar la mayor cantidad posible de dinero?
  #13 (permalink)  
Antiguo 27/11/2008, 08:08
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Respuesta: Será óptimo esto que estoy haciendo?

Bueno... lo del carro de la compra y sobre la pregunta de si es óptimo almacenar los datos en un DataTable mi respuesta es que no es para nada lo más optimo.

Un DataTable supone mucha memoria para la poca información que estimo vas a usar... Es una solución sencilla y si estas empezando con .NET lo veo bueno para ir empezando.

Sin embargo, si lo que quieres es saber si tu código es óptimo, lamentablemente tengo que decirte que en absoluto. Deberias usar tus clases para gestionar tu cesta de la compra.

Por ejemplo algo asi:
Código:
[Serializable]
public Class ClsProducto
{
         public int CodigoProducto{ get; set; }
         public string NombreProducto{ get; set; }
         public decimal ImporteProducto{ get; set; }
         //Esta sería la cantidad de productos iguales que ha agregado el usuario.
         public int CantidadProducto{ get; set; }
         public decimal ImporteTotalProducto{ return (this.CantidadProducto * this.ImporteProducto); }
}

[Serializable]
public Class ClsCesta
{
       public List<ClsProductos> ProductosCesta{ get; set; }
       public decimal ImporteTotal
       {
             //Aqui meter una sentencia LinQ para que te devuelva el importe total de todos los productos que tienes en this.ProductosCesta.
       }
}
Bueno, te comento esto, por si tu idea es mejorar y perfeccionar tu desarrollo. Espero te sirva de utilidad. Yo hice relativamente poco una aplicación de compras online con su respectiva cesta y su pasarela de pago con el banco y usé clases mejor que DataTables, ya que bueno... cuanto menos recursos se consuman mejor.

Por si te interesa, puedes verla aqui: http://www.sequeldenim.com (Espero os guste.... y que no encontreis bugs, jajaja)

Un saludo amigos.
__________________
Charlie.
  #14 (permalink)  
Antiguo 27/11/2008, 20:14
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 3 meses
Puntos: 50
Respuesta: Será óptimo esto que estoy haciendo?

Cita:
1. Las 20 chicas y los 10 chicos de un curso de COU organizan un viaje, para el cual necesitan dinero. Deciden pedir trabajo por las tardes en una compañía encuestadora que contrata a equipos jóvenes de dos tipos:
De que me perdí o que es éste mensaje
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #15 (permalink)  
Antiguo 28/11/2008, 08:21
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Respuesta: Será óptimo esto que estoy haciendo?

JAJAJAJAJA, estoy igual que tu.
__________________
Charlie.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:16.