2012-02-15 88 views
2

我的.Net應用程序是一個4.0 ASP.net應用程序,有很多數據庫更新,網格刷新後,網格刷新執行更新表的某些事件等)問題是...你會猜測什麼'在應用程序中吃了很多公羊'。 (在幾分鐘內它容易增長到1GB以上)....NET性能調優

我該如何解決這個問題?我會尋求什麼類型的優化?或者你認爲最適合我的方法是什麼?

這一直在困擾我一陣子,但我不能爲我的生活找出什麼導致瓶頸。我關閉了我的對象等,但不確定瓶頸是在SQL還是ASP.net後端。

+0

如何更新/插入到數據庫?我的意思是你正在更新一筆交易的記錄?請提供更多的細節..數據更新過程..或任何我們可以檢查的代碼.. – 2012-02-15 03:36:59

+0

@jason你如何填充網格?你在使用數據集嗎?你是否在會話中存儲所述數據集?你如何編碼網格的數據檢索?您是僅返回當前頁面所需的數據,還是隻返回所有xxx行以顯示其中的100行?有很多地方可以查找問題 – clyc 2012-02-15 03:48:13

回答

0

下面是我的意見

我的.NET應用程序是一個4.0 ASP.net應用程序有很多數據庫更新

使用報表ADO.Net

using (SqlConnection con = new SqlConnection("Your Connection String")) 
{ 
    using (SqlCommand cmd = new SqlCommand("Your Stored Procedure Name", con)) 
    { 
     SqlParameter param = new SqlParameter(); 
     param.ParameterName = "Parameter Name"; 
     param.Value = "Value"; 
     param.SqlDbType = SqlDbType.VarChar; 
     param.Direction = ParameterDirection.Input; 
     cmd.Parameters.Add(param); 
     cmd.ExecuteNonQuery(); 
    } 
} 

和電網刷新在網格刷新執行到 更新表等

  1. 某些事件使用分頁讓您記錄您的網格......以避免性能/內存管理問題
  2. 一旦網格將重新填充,在綁定數據之前進行處理。

你會猜測是什麼在我的應用程序 '吃RAM的很多'。 (它 在幾分鐘內容易增長到1GB以上)...

您是否使用DataSet/DataTable?請使用後丟棄。否則,你將面臨崩潰Memory Out of Exception ...


您可以使用ANTS內存分析器的內存泄漏

參考

ANTS MEMORY PROFILER

+0

要回答幾個問題,SqlDataSource是我使用參數化查詢進行更新的「數據源」。對於使用參數化select查詢而言,爲查詢創建存儲過程會更快嗎?他們只是一個班輪(SET [field] = @newvalue)類型的查詢。但是越來越多的數據庫(目前只有300行,但期望值超過10000),如果我們現在有內存問題,我們肯定希望在我們前進之前解決。 – Jason 2012-02-15 03:47:29

+0

我將檢查ANTS,我聽說過它,從未使用它;是否很容易實現以剖析一個asp.net應用程序? – Jason 2012-02-15 03:47:58

+0

-1爲螞蟻;)在那裏,使用它 - Scitech是一個很好的;)對不起,我喜歡他們的產品一般...賽特內存分析器,視覺工作室性能分析器和你areyn appyn。 – TomTom 2012-02-15 04:52:50

2

可以是任何東西。

用於調試此類問題的工具稱爲內存分析器。有一個叫做「.NET Memory Profiler」的好軟件(見memprofiler.com)有免費試用版。某些版本的Visual Studio也包含一個內存分析器。

作爲一個猜測,我會說你將一些含有數據的對象保存在某個靜態變量中,而不是在你使用它時釋放它。

+0

這讓我想到,我將獨立檢查所有對象以檢查是否所有內容都已發佈。 (=無)在他們的例程結束。這是非常可能的,考慮共享變量我從來沒有檢查過這些......我會讓每個人都知道。 – Jason 2012-02-15 04:46:21

+0

+1。我也使用那個。它岩石。 – TomTom 2012-02-15 04:53:20