3

I am currently investigating some performance issue in a big application setup with Unity. I am suspecting that we are allocating too many objects. Since Unity handles objects creation/allocation, is there an event or something that I could log when an object is resolved or created by Unity? I'd like a full trace so that I understand better what is going on.

Thanks!

4

4 回答 4

3

我不会去定制LifetimeManager。如果您想知道 Unity 何时创建新对象,您应该直接从 Unity 的构建管道中获取该信息。

在 codeplex 上的 TecX 项目中有一个扩展,它在容器创建对象之前和之后引发事件。查看TecX.Unity项目(文件夹通知)中的源代码。TecX.Unity.Tests中的测试展示了如何使用它。

于 2012-05-15T06:20:30.067 回答
2

尝试以自定义生命周期管理器的方式进行搜索。您可以包装对象实例化的默认生命周期管理器和日志时间。也许这个链接可以帮助你:http ://tavaresstudios.com/Blog/post/Writing-Custom-Lifetime-Managers.aspx

于 2012-05-14T21:17:34.953 回答
2

您可以通过UnityContainerExtension. 构建一个在阶段添加单个构建器策略的构建器TypeMapping

    protected override void Initialize()
    {
        Context.Strategies.Add(_builderStrategy, UnityBuildStage.TypeMapping);
    }

PreBuildUp方法里面BuilderStrategy你可以看到要解决什么,在PostBuildUp方法里面你可以看到已经解决了什么。

于 2012-05-15T07:36:19.410 回答
0

快速而肮脏的解决方案是在您认为被多次创建的对象的默认构造函数中添加一些日志记录代码并转储堆栈跟踪。您还可以在此代码中设置断点并在调试期间检查堆栈。

于 2012-05-14T21:31:35.600 回答