Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Unity—解析/实例化对象时如何得到通知?_C#_.net_Unity Container - Fatal编程技术网

C# Unity—解析/实例化对象时如何得到通知?

C# Unity—解析/实例化对象时如何得到通知?,c#,.net,unity-container,C#,.net,Unity Container,我目前正在调查Unity大型应用程序设置中的一些性能问题。我怀疑我们分配了太多的对象。因为Unity处理对象的创建/分配,所以当Unity解析或创建对象时,是否有一个事件或一些我可以记录的东西?我想要一个完整的跟踪,以便我更好地了解发生了什么 谢谢 尝试以自定义生命周期管理器的方式进行搜索。您可以包装默认的生命周期管理器和对象实例化的日志时间。 也许这个链接可以帮助您:快速而肮脏的孤独是在您认为多次创建的对象的默认构造函数中添加一些日志代码,并转储堆栈跟踪。您还可以在此代码中设置断点,并在调试期

我目前正在调查Unity大型应用程序设置中的一些性能问题。我怀疑我们分配了太多的对象。因为Unity处理对象的创建/分配,所以当Unity解析或创建对象时,是否有一个事件或一些我可以记录的东西?我想要一个完整的跟踪,以便我更好地了解发生了什么


谢谢

尝试以自定义生命周期管理器的方式进行搜索。您可以包装默认的生命周期管理器和对象实例化的日志时间。
也许这个链接可以帮助您:

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

我不会选择自定义的
LifetimeManager
。如果您想知道Unity何时创建一个新对象,您应该直接从Unity的构建管道获取该信息


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

您可以通过
UnityContainerExtension
跟踪依赖项解析。构建一个在
TypeMapping
阶段添加单个构建器策略的构建器:

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

BuilderStrategy
pre-build
方法中,您可以看到将要解决的问题,在
post-build
方法中,您可以看到已解决的问题。

您遇到了什么样的性能问题?一旦我有了这样的问题,我就会想起那件事。。。但是有太多的代码需要更新:(如果将策略添加到
TypeMapping
阶段,您看不到对象是否实际构造。例如
ContainerControlled LifetimeManager
会将
BuilderContext.Existing
属性设置为其缓存值。您不能在
BuildStage
的前面插入策略,否则您的策略y应该是
创建
阶段的第一个。由于此限制,您必须将策略附加到
预创建
阶段。