Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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
Performance Castle Windsor在启动时总是那么慢吗?_Performance_Castle Windsor - Fatal编程技术网

Performance Castle Windsor在启动时总是那么慢吗?

Performance Castle Windsor在启动时总是那么慢吗?,performance,castle-windsor,Performance,Castle Windsor,我刚刚注意到,Castle Windsor容器在我的工作pc(Core i5第一代)上需要400毫秒,在我的家用pc(i5 haswell)上需要200毫秒才能创建、注册几个组件并解析一个没有依赖关系的对象 Unity在不到50毫秒的时间内完成相同的操作 这对我来说似乎大错特错。我的VS2013从SSD开始只需1秒,我相信CW(是的,我知道这些是桔子和苹果)会更复杂、更丰富。我希望应用程序的启动时间尽可能短 我能做些什么来加快速度吗?有没有人面临同样的问题 以下是代码片段: class Prog

我刚刚注意到,Castle Windsor容器在我的工作pc(Core i5第一代)上需要400毫秒,在我的家用pc(i5 haswell)上需要200毫秒才能创建、注册几个组件并解析一个没有依赖关系的对象

Unity在不到50毫秒的时间内完成相同的操作

这对我来说似乎大错特错。我的VS2013从SSD开始只需1秒,我相信CW(是的,我知道这些是桔子和苹果)会更复杂、更丰富。我希望应用程序的启动时间尽可能短

我能做些什么来加快速度吗?有没有人面临同样的问题

以下是代码片段:

class Program
    {
        static void Main(string[] args)
        {
            var sw = Stopwatch.StartNew();
            var container = new WindsorContainer();
            container.AddFacility<TypedFactoryFacility>();
            container.Register(
                Component.For<IItemFactory>().AsFactory(),
                Component.For<IItem>().ImplementedBy<Item>().LifestyleTransient());
            var factory = container.Resolve<IItemFactory>();
            sw.Stop();
            Console.WriteLine(sw.Elapsed); // 00:00:00.1991386
        }
    }

    public interface IItemFactory
    {
        IItem Create();
    }

    public class Item : IItem
    {
        public string Value { get; set; }
    }
    public interface IItem
    {
        string Value { get; set; }
    }
类程序
{
静态void Main(字符串[]参数)
{
var sw=Stopwatch.StartNew();
var container=新的WindsorContainer();
container.AddFacility();
集装箱。登记(
Component.For().AsFactory(),
Component.For().ImplementedBy().LifestyleTransient());
var factory=container.Resolve();
sw.Stop();
Console.WriteLine(sw.appeased);//00:00:00.1991386
}
}
公共接口项目工厂
{
IItem Create();
}
公共类项目:IItem
{
公共字符串值{get;set;}
}
公共接口项
{
字符串值{get;set;}
}

这里也一样,对于Xeon 2.4GHz 64位16Gb机器,sw.appeased={00:00:00.2971155}。由于您使用的是
TypedFactoryFacility
,我希望Castle加载Castle项目拦截,加载和生成第一个类可能需要额外的启动成本。如果将
For().AsFactory()
替换为
For().ImplementedBy()
,会发生什么情况?@Steven,这有点帮助,现在是100ms。但仍然比Unity慢2倍。@olldman即使是短时间的leving应用程序,100毫秒的启动时间对我来说也不算多。如果这对你来说仍然太多,你还有其他问题。在计算方面,100毫秒是一个巨大的时间量,我可以在100毫秒内多次到远程机器上获取数据。cpu上的操作是以纳秒为单位测量的,甚至在2014年也是如此