测试List<T> 跟ArrayList性能的例子

复制代码
  public class FanXingTest
    {
        public static void TestMain()
        {
            ValueTypePerfTest();
            ReferenceTypePerfTest();
            Console.ReadKey();
        }

        private static void ValueTypePerfTest()
        {
            const Int32 count = 1000000;
            using (new OperationTimer("List<Int32>"))
            {
                List<Int32> l = new List<Int32>(count);
                for (int i = 0; i <count; i++)
                {
                    l.Add(i);
                    int x = l[i];
                }
                l = null;
            }

            using (new OperationTimer("ArrayList of Int32"))
            {
                ArrayList a = new ArrayList();
            
                for (int i = 0; i < count; i++)
                {
                    a.Add(i);
                    Int32 x = (Int32)a[i];
                }

                a = null;
            }
        }

        private static void ReferenceTypePerfTest()
        {
            const Int32 count = 1000000;
            using (new OperationTimer("List<string>"))
            {
                List<string> l = new List<string>(count);
                for (int i = 0; i < count; i++)
                {
                    l.Add("x");
                    string x = l[i];
                }
                l = null;
            }
            using (new OperationTimer("ArrayList of string"))
            {
                ArrayList l = new ArrayList();
                for (int i = 0; i < count; i++)
                {
                    l.Add("x");
                    string x =(string) l[i];
                }
                l = null;
            }
        }
    }

    internal sealed class OperationTimer : IDisposable
    {
        private Int64 m_startTime;
        private string m_text;
        private Int32 m_collectionCount;

        public OperationTimer(string text)
        {
            PrepareForOperation();
            m_text = text;
            m_collectionCount = GC.CollectionCount(0);

            m_startTime = Stopwatch.GetTimestamp();
        }
        public void Dispose()
        {
            Console.WriteLine("{0} seconds GCs={1}  {2}",(Stopwatch.GetTimestamp()-m_startTime)/(double) Stopwatch.Frequency,GC.CollectionCount(0)-m_collectionCount,m_text );
        }


        private static void PrepareForOperation()
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();
            GC.Collect();
        }
    }
复制代码

 

posted @   haohaizi  阅读(500)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示