首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >泛型与对象性能

泛型与对象性能
EN

Stack Overflow用户
提问于 2011-01-03 22:32:00
回答 5查看 1.8K关注 0票数 5

我正在做MCTS Exames70-536Microsft .Net框架应用程序开发基础的练习题,其中一个问题是创建两个类,一个泛型,一个对象类型,这两个类都执行相同的事情;其中一个循环使用该类并迭代数千次。并使用计时器,对两者的性能进行计时。在C# generics question上还有另一个帖子也在寻找同样的问题,但没有人回复。

基本上,如果在我的代码中,我首先运行泛型类,它需要loger来处理。如果我先运行object类,那么处理object类所需的时间会更长。整个想法是为了证明泛型执行得更快。

我使用原始的用户代码来节省一些时间。我没有特别看到代码中有任何错误,并且对结果感到困惑。有人能解释一下为什么会出现这种不寻常的结果吗?

谢谢,

Risho

代码如下:

代码语言:javascript
复制
class Program
{
    class Object_Sample
    {            
        public Object_Sample()
        {
            Console.WriteLine("Object_Sample Class");
        }

        public long getTicks()
        {
            return DateTime.Now.Ticks;
        }

        public void display(Object a)
        {
            Console.WriteLine("{0}", a);
        }
    }

    class Generics_Samle<T>
    {            
        public Generics_Samle()
        {
            Console.WriteLine("Generics_Sample Class");
        }

        public long getTicks()
        {
            return DateTime.Now.Ticks;
        }

        public void display(T a)
        {
            Console.WriteLine("{0}", a);
        }
    }

    static void Main(string[] args)
    {            
        long ticks_initial, ticks_final, diff_generics, diff_object;
        Object_Sample OS = new Object_Sample();
        Generics_Samle<int> GS = new Generics_Samle<int>();

        //Generic Sample
        ticks_initial = 0;
        ticks_final = 0;
        ticks_initial = GS.getTicks();

        for (int i = 0; i < 50000; i++)
        {
            GS.display(i);
        }
        ticks_final = GS.getTicks();
        diff_generics = ticks_final - ticks_initial;

        //Object Sample
        ticks_initial = 0;
        ticks_final = 0;
        ticks_initial = OS.getTicks();

        for (int j = 0; j < 50000; j++)
        {
            OS.display(j);
        }

        ticks_final = OS.getTicks();
        diff_object = ticks_final - ticks_initial;

        Console.WriteLine("\nPerformance of Generics {0}", diff_generics);
        Console.WriteLine("Performance of Object {0}", diff_object);

        Console.ReadKey();
    }
}
EN

Stack Overflow用户

发布于 2011-01-03 22:35:33

为什么它会更快呢?两个in都必须装箱才能使用Console.WriteLine(string,object)

编辑: ToString()本身似乎不会导致装箱http://weblogs.asp.net/ngur/archive/2003/12/16/43856.aspx

所以当你使用Console.WriteLine(A)时;它会调用Console.WriteLine(Int32),我想这应该是可行的(我需要查看反射器来确认这一点)

票数 3
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4585280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档