Skip to content

Optimizing UnityContainer constructors #187

@ENikS

Description

@ENikS

Changing how UnityContainer is created

Name

As explained in this issue the container does not provide any means of identifying individual instances. To fix this problem a property Name has been added to IUnityContainer interface.

By default, if no name is provided, a root UnityContainer will have a name 'root' and child containers will have no name (null).

Memory optimization

Unity, as any other general purpose storage (List, Dictionary, etc.) allocates memory dynamically. It creates relatively small buffer and resizes it in small increments (25% - 30% of already allocated size) as required.

The algorithm is trying to minimize memory footprint and allocates as little as possible. It works well for relatively small number of registrations, but when number of registered components is relatively large, all these minimization efforts just add to the overhead.

To work around this issue, new constructors allow passing initial capacity a user expects it to hold:

public UnityContainer(string name, int capacity);

For compatibility and when no name of allocations are required following overloads are provided:

public UnityContainer();
public UnityContainer(string name);
public UnityContainer(int capacity);

Metadata

Metadata

Assignees

No one assigned

    Labels

    Enhancement 🔨Improvement of existing features

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions