程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 通過VS2010性能分析來查找代碼中那些地方最損耗資源

通過VS2010性能分析來查找代碼中那些地方最損耗資源

編輯:C#入門知識

在編寫完成一個程序後,大家都比較關心程序的性能如何,想把程序優化得更好。很多時候憑個人直覺來優化程序是件非常不靠普的事情,即使你是一個優秀的開人員也很難准確地判斷程序中那些出現問題。VS2010提供了性能分析工具就能輕松地幫我們解決這一事情。

  • 假設現在寫了一個組件,很想知道組件和代碼的性能情況。這個可以簡單地寫一個測試程序。
		class Program
    {
        static List<Expression> mExpressions = new List<Expression>();
        static Random mRan = new Random();
        static void Main(string[] args)
        {
            try
            {
                string dbpath = @"Data Source=d:\\northwind.db;Pooling=true;FailIfMissing=false;";
                DBContext.SetConnectionDriver<SqliteDriver>(ConnectionType.Context1);
                DBContext.SetConnectionString(ConnectionType.Context1, dbpath);
                mExpressions.Add(Order.shipCountry == "Switzerland");
                mExpressions.Add(Order.shipRegion == "RJ");
                mExpressions.Add(Order.customerID.In(Customer.customerID, Customer.country == "UK"));
                mExpressions.Add(Order.customerID.In(Customer.customerID, Customer.country == "Germany"));
                mExpressions.Add(Order.orderDate > "1997-8-5");
                mExpressions.Add(Order.orderDate < "1997-12-1");
                mExpressions.Add(Order.orderDate > "1997-5-1" & Order.orderDate<"1997-11-5");
                System.Threading.Thread thread;
                for (int i = 0; i < 10; i++)
                {
                    thread = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(Test
                        ));
                    thread.Start();
                }
                
            }
            catch (Exception e_)
            {
                Console.WriteLine(e_.Message);
            }
           
        }
        static void Test(object obj)
        {
            while (true)
            {
                Expression exp = mExpressions[mRan.Next(mExpressions.Count - 1)];
                Console.WriteLine(exp.Count<Order>());
                System.Threading.Thread.Sleep(mRan.Next(50, 5000));
            }
        }
      
    }
  • 測試程序寫好後可以通過VS2010分析菜單裡選擇啟用性能向導

\

  • 選擇CPU采樣後就選擇需要分析的項目

\

  • 測試項目選擇完成後就可以運行分析,結束分析後VS2010會提供個詳細報告文檔

\

  • 從分析結果來看GetConnection這個方法占用的比例是最嚴重的,我們可以點擊進去看下這函數倒做了些什麼,那些代碼損耗得最利害。

\

  • 從上面結果來看損耗最利害的是創建ConnectionContext對象,這個時候我們可以進一步點擊進去看個究竟

\

  • 這個方法還沒發現真正的原因,我們繼續往下走

 

\

  到了這裡發現原來是connection.Open方法占用了大部分資源,這個時候就想到這個測試程序跑這麼久為什麼連接打開這麼損耗資源,是不是連接池沒有開啟導致每次操作都進行數據庫連接操作呢?

  其實VS2010給我們提供的分析工具真得很輕松就可以讓我們了解到程序代碼狀況,從而優化程序的代碼。如果有這煩腦的朋友不防試下:)

摘自:smark
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved