Mejora del rendimiento con la agrupación de objetos

La agrupación de objetos puede ser extremadamente eficaz en determinadas circunstancias, lo que produce aumentos sustanciales en el rendimiento. La idea general de reutilizar objetos para aprovechar mejor es agrupar tantos recursos como sea posible, factorizar la inicialización del trabajo real realizado y, a continuación, adaptar administrativamente las características del grupo al hardware real en el momento de la implementación. Es decir, debe continuar según los pasos siguientes:

  1. Escriba el objeto para factorizar la inicialización y la adquisición de recursos costosas que se realizan para cualquier cliente como requisito previo para realizar el trabajo real en nombre del cliente. Escriba constructores de objetos pesados para agrupar tantos recursos como sea posible, de modo que estos se mantienen en el objeto y están disponibles inmediatamente cuando los clientes obtienen un objeto del grupo.
  2. Configure administrativamente el grupo para lograr el mejor equilibrio en los recursos de hardware disponibles, normalmente negociando la memoria dedicada a mantener un grupo de un determinado tamaño a cambio de un acceso de cliente más rápido y el uso de objetos. En un momento determinado, la agrupación logrará devoluciones decrecientes y puede obtener un rendimiento lo suficientemente bueno, al tiempo que se limita el posible uso de recursos por parte de un componente determinado.

Realizar trabajo real o adquirir recursos

Si tiene un componente que los clientes usarán breve y en sucesión rápida, donde una parte significativa del tiempo de uso de objetos se invierte en adquirir recursos o inicializar antes de realizar un trabajo específico para el cliente, es probable que escribir el componente para usar la agrupación de objetos sea una gran ventaja para usted.

Puede escribir el componente para que, en el constructor del objeto, realice la mayor parte del trabajo que consume mucho tiempo para todos los clientes, adquirir una o varias conexiones, ejecutar scripts, capturar datos de inicialización de archivos o de una red, etc. Esto tiene el efecto de agrupar cada recurso de este tipo. Está agrupando la combinación de recursos y el estado genérico necesario para realizar algún trabajo.

En esta circunstancia, cuando los clientes obtienen un objeto del grupo, tienen esos recursos disponibles inmediatamente. Normalmente, usarán el objeto para realizar una pequeña unidad de trabajo, insertar o extraer datos y, a continuación, el objeto llamará a IObjectContext::SetComplete o IObjectContext::SetAbort y devolverá. Con patrones de uso rápidos como este, la agrupación ofrece excelentes ventajas de rendimiento. Puede aprovechar completamente la simplicidad del modelo de programación automática de transacciones sin estado pero lograr el rendimiento a la par de los componentes con estado tradicionales.

Sin embargo, si los clientes usan un objeto durante mucho tiempo cada vez que lo llaman, la agrupación tendrá menos sentido. La ventaja de velocidad que obtiene es marginal a medida que aumenta el tiempo de uso en relación con el tiempo de inicialización. Obtiene devoluciones que pueden no justificar el costo de la memoria necesaria para contener un grupo de objetos activos.

Costo compartido entre varios clientes

Una variación en la factorización de la inicialización es que puede usar la agrupación para amortizar estadísticamente el costo de adquirir recursos costosos. Si toma el acierto de la adquisición o la inicialización una vez y, a continuación, reutiliza el objeto, comparte ese costo en todos los clientes que usan el objeto durante su vigencia. El tiempo de construcción pesado se incurre solo una vez por objeto.

Asignar previamente objetos

Si especifica un tamaño mínimo de grupo distinto de cero, ese número mínimo de objetos se creará y agrupará cuando se inicie la aplicación, listo para los clientes que llaman a en la aplicación.

Administración de recursos con administración de grupos

Puede usar el tamaño máximo del grupo para controlar de forma muy precisa cómo se usan los recursos. Por ejemplo, si ha licenciado un número determinado de conexiones de base de datos, puede controlar cuántas conexiones tiene abiertas en cualquier momento.

Cuando tenga en cuenta los patrones de uso de cliente, las características de uso de objetos y los recursos físicos, como la memoria y las conexiones, es probable que encuentre algún punto de equilibrio óptimo al realizar el ajuste del rendimiento. La agrupación de objetos producirá devoluciones decrecientes después de un punto determinado. Puede determinar qué nivel de rendimiento necesita y equilibrarlo con respecto a qué recursos son necesarios para lograrlo.

Para facilitar el ajuste del rendimiento al configurar la agrupación de objetos, puede supervisar las estadísticas de objetos de los componentes de una aplicación. Para obtener más información, consulte Supervisión de estadísticas de objetos.

Mejorar el rendimiento de los componentes de JIT-Activated

La agrupación de objetos funciona muy bien con el servicio de activación Just-In-Time de COM+ . Al agrupar objetos que se activan JIT, puede acelerar la reactivación de objetos. Obtiene las ventajas de mantener abierto el canal mediante la activación JIT, a la vez que mitiga el costo de reactivación. En este caso, puede usar la agrupación para controlar la cantidad de memoria que desea asignar a los objetos que tienen referencias activas.

Es más probable que esté agrupando componentes activados por JIT cuando son transaccionales. La agrupación de objetos está optimizada para controlar los componentes transaccionales. Para obtener más información, vea Agrupación de objetos transaccionales.

Cadenas del constructor de objetos COM+

Controlar la duración y el estado de los objetos

Funcionamiento de la agrupación de objetos

Agrupación de objetos transaccionales

Requisitos para objetos agrupables