当前位置:编程学习 > C#/ASP.NET >>

请教一下代码书写问题,哪个执行效率更高?

1.下面代码中,是否 test2 比 test1,而 test4 比 test3 执行的效率更高?
2.test4 中,当第二次给 dt 赋值时,是否先释放先前占用的内存?
懂的朋友分享一下,不要只回答 yes or no.
namespace MyNet.Test
{
    public partial class WebForm3 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Test1();
            Test2();
            Test3();
            Test4();
        }

        private void Test1()
        {
            int RecordCount = 0;
            string strSQL = "select * from news";
            DataTable dt = BusinessSystem.GetDataSet(strSQL, out RecordCount).Tables[0];
            if (RecordCount > 0)
            {
                for (int i = 0; i < RecordCount; i++)
                {
                    string field1 = dt.Rows[i]["field1"].ToString().Trim();
                    string field2 = dt.Rows[i]["field2"].ToString().Trim();
                    //业务处理..
                }
            }
        }

        private void Test2()
        {
            int RecordCount = 0;
            string strSQL = "select * from news";
            DataTable dt = BusinessSystem.GetDataSet(strSQL, out RecordCount).Tables[0];
            if (RecordCount > 0)
            {
                string field1 = "";
                string field2 = "";
                for (int i = 0; i < RecordCount; i++)
                {
                    field1 = dt.Rows[i]["field1"].ToString().Trim();
                    field2 = dt.Rows[i]["field2"].ToString().Trim();
                    //业务处理..
                }
            }
        }

        private void Test3()
        {
            int RecordCount1 = 0;
            string strSQL1 = "select * from news where type = 1";
            DataTable dt1 = BusinessSystem.GetDataSet(strSQL1, out RecordCount1).Tables[0];
            if (RecordCount1 > 0)
            {
                //业务处理1
            }
            int RecordCount2 = 0;
            string strSQL2 = "select * from news where type = 2";
            DataTable dt2 = BusinessSystem.GetDataSet(strSQL2, out RecordCount2).Tables[0];
            if (RecordCount2 > 0)
            {
                //业务处理2
            }
        }

        private void Test4()
        {
            int RecordCount = 0;
            string strSQL = "select * from news where type = 1";
            DataTable dt = BusinessSystem.GetDataSet(strSQL, out RecordCount).Tables[0];
            if (RecordCount > 0)
            {
                //业务处理1
            }
            strSQL = "select * from news where type = 2";
            dt = BusinessSystem.GetDataSet(strSQL, out RecordCount).Tables[0];
            if (RecordCount > 0)
            {
                //业务处理2
            }
        }
    }
}
--------------------编程问答-------------------- 理论上坐在火车靠前车厢的乘客比后排的更早到达目的地。因此你买火车票一定要买最前面车厢的,那样你就赚大发了! --------------------编程问答-------------------- (对于console工程)你可以这样打印一下测试结果
var lst = new List<Action> { test1, test2, test3, test4 };
var rnd = new Random();
var testcases = (from x in lst
                    from n in Enumerable.Range(0, 100)
                    select x).OrderBy(x => rnd.Next());    //随机排序,每个测试重复100次
(from x in testcases
    let r = new { testcase = x, tm = Run(x).TotalMilliseconds }
    group r by r.testcase into g
    select new { testcase = g.Key, tm = g.Sum(y => y.tm) / 100 })
    .ToList()
    .ForEach(x => Console.WriteLine("测试用例 {0} 用时 {1} 毫秒", x.testcase.GetType().Name, x.tm));
--------------------编程问答--------------------
private static TimeSpan Run(Action x)
{
    var st = new Stopwatch();
    st.Start();
    x();
    st.Stop();
    return st.Elapsed;
}
--------------------编程问答--------------------
引用 楼主 u010900359 的回复:
1.下面代码中,是否 test2 比 test1,而 test4 比 test3 执行的效率更高?
2.test4 中,当第二次给 dt 赋值时,是否先释放先前占用的内存?


test1跟test4中的局部变量dt根本没有任何关系。 --------------------编程问答--------------------
引用 1 楼 caozhy 的回复:
理论上坐在火车靠前车厢的乘客比后排的更早到达目的地。因此你买火车票一定要买最前面车厢的,那样你就赚大发了!


好深奥的比喻.. --------------------编程问答--------------------
引用 4 楼 sp1234 的回复:
Quote: 引用 楼主 u010900359 的回复:

1.下面代码中,是否 test2 比 test1,而 test4 比 test3 执行的效率更高?
2.test4 中,当第二次给 dt 赋值时,是否先释放先前占用的内存?


test1跟test4中的局部变量dt根本没有任何关系。


不是,我是指 test3() 中,定义了 dt1 和 dt2,是不是比 test4() 写法中只定义一个 dt 占用的内存多。 --------------------编程问答-------------------- 没事最好不要乱设置变量,特别是代码多的情况下,能设置局部最好只设置局部,否则到时肯定会出乱子 --------------------编程问答--------------------
引用 7 楼 liuchaolin 的回复:
没事最好不要乱设置变量,特别是代码多的情况下,能设置局部最好只设置局部,否则到时肯定会出乱子


我说的是性能方面的问题, 代码多少有什么关系呢.. 我就想知道怎样定义,效率会更高些,可能代码少的时候效率都差不多,但是功能复杂时,就需要注意这些细节了.. --------------------编程问答-------------------- test1跟test2的区别是test1提前定义了两个空字符串,test2是在用的时候才定义的字符串。 --------------------编程问答-------------------- test1跟test2的区别是test1提前定义了两个空字符串,test2是在用的时候才定义的字符串。
test3与test4的却别是test3用了两个int类型的变量记录总数,test4是用了一个。。 --------------------编程问答-------------------- 这个性能上真的差不了什么,如果真的写比较复杂的东西,性能方面的瓶颈一般也不会是这些的。还不如去百度一下提高网站性能出来的东西呢。
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,