2012-07-11 10 views
7

Supongamos que tengo un objeto grande que contiene las propiedades que necesito y, además, varios métodos y algunas colecciones importantes.Pase un gran objeto existente o cree y pase un pequeño objeto

Me gustaría saber qué costaría más: pasar como argumento este objeto grande que ya existe, o crear un objeto pequeño que contenga solo el puñado de propiedades que necesito y pasarlo.

Respuesta

14

Si solo lo pasa como argumento para un método, pasar el objeto "grande" es "más barato": solo va a pasar una copia de la referencia del objeto, que tiene el tamaño de un puntero (a menos que el objeto sea de tipo struct, en cuyo caso el "objeto" completo se copia en la pila). Si tuviera que crear un objeto nuevo, incluso si es pequeño, estaría pagando el precio de la asignación y copia de las propiedades en él, que no tiene si pasa el objeto "grande".

Si lo está pasando de una manera que necesita ser serializado (es decir, a través de aplicaciones, en una llamada a un servicio web, etc.), teniendo el objeto más pequeño (esencialmente un DTO, Objeto de transferencia de datos) se prefiere.

+0

Gracias Carlos. Es bueno saber eso. – Steve

2

Mientras pase por referencia, no importa. Por lo tanto, no debe introducir complejidad adicional. De hecho, costaría más a la máquina, ya que también tendría que crear ese objeto contenedor.

Dado que pareces preocupado por el rendimiento, te recomendaría aprender cómo funcionan los punteros y la administración de memoria en C. Una vez que comprendas eso, te será mucho más fácil entender cómo sus versiones abstractas en lenguajes de nivel superior afectan el rendimiento.

Cuestiones relacionadas