Kunal Ved Ответов: 2

Метод заполнения адаптера данных работает медленно.


Я поддерживаю приложение, которое находится в старой 3-х уровневой арке.

Создайте общий метод, который выполняет процедуру хранения, возвращает набор данных и связывает gridview

public DataSet Execute_StoreProc_DataSet(string psStoreProcName)
		{
			DataSet dsResult= new DataSet(); 
			UtilParams objParams;
			SqlConnection objConnection=null;
			SqlParameter objSqlParams=null;
			SqlCommand objCommand=null;
			SqlDataAdapter objSqlDataAdapter=null;

			try
			{
				objConnection=getConnection();
				objCommand= new SqlCommand(psStoreProcName,objConnection);  
				objCommand.CommandType=CommandType.StoredProcedure;
                objCommand.CommandTimeout = 0;
				
				IDictionaryEnumerator en = mhtParamCollection.GetEnumerator();

				while (en.MoveNext())
				{
					objParams=(UtilParams)en.Value; 
					objSqlParams = new SqlParameter();
					objSqlParams.ParameterName=objParams.ParamName;
					objSqlParams.SqlDbType =(SqlDbType)objParams.ParamType;
					objSqlParams.Direction=objParams.Direction;
					if (objParams.Direction==ParameterDirection.Output)
					{
						objSqlParams.Size=objParams.ParamSize;   
					
					}
		
					objSqlParams.Value= objParams.ParamValue;
					objCommand.Parameters.Add(objSqlParams);  
				}
				objSqlDataAdapter= new SqlDataAdapter(objCommand);
				objSqlDataAdapter.Fill(dsResult);  
				return dsResult;
			}
			catch(Exception Ex)
			{
				//ErrorHandler objERR = new ErrorHandler();
				//objERR.WriteError(DateTime.UtcNow +  ", DAL.DBUtility-Execute_StoreProc_DataSet(): " +  Ex.Message.ToString() + " " + Environment.UserName, Environment.UserName);
				throw;
			}
			finally
			{
				objCommand.Dispose();
				objSqlDataAdapter.Dispose();
				if (objConnection.State ==ConnectionState.Open)
					objConnection.Close();  
			}
			
		}




Сначала я подумал, что магазин Proc работает медленно. Если я выполняю с заднего конца
отображение результата в SSMS занимает 10 секунд.
Но то же самое в режиме отладки занимает слишком много времени, следовательно, связывает данные слишком поздно (более 4-5 минут).

Поможет ли программа чтения данных?

Что я уже пробовал:

Я создал индекс на таблице. Но в конце пользовательского интерфейса я не знаю , что можно было бы обойти

2 Ответов

Рейтинг:
2

Bhushan Shimpi

Использовать DataReader и его метод execute читателя, чтобы заполнить набор данных, вместо объекта dataadapter.


Рейтинг:
0

OriginalGriff

Начните с того, что посмотрите на SP. Что он делает, как он это делает.
Выполните его через SSMS и посмотрите, сколько времени это займет и что он возвращает - вам нужно установить, где именно находится узкое место, прежде чем вы сможете начать изменять вещи для повышения производительности.
Если SP занимает 5 минут для запуска, то вы тратите свое время, пытаясь оптимизировать свой код C#!
Если SP занимает секунды, но возвращает огромные объемы данных, то вам нужно посмотреть, почему вы обрабатываете так много, поскольку это, вероятно, будет проблемой, и никакое количество настроек не изменит этого - вам нужно будет изменить весь способ работы вашего приложения. Например, загрузка огромных объемов данных в пользовательские дисплеи всегда будет медленным процессом.
Поэтому возьмите некоторые данные (используйте класс Stopwatch в C#, чтобы получить твердый набор временных данных, где это возможно) и сосредоточьтесь на медленных областях.
Мы не можем сделать это за вас: у нас нет доступа к вашим данным или вашему коду!