I am calling a SQL Server stored procedure to get huge amount of records from the database, but it's causing timeout execution errors when run. How can we make it fast in this way?
I am using stored procedure call in Entity Framework. The stored procedure takes input parameters and out parameter is total record in table for pagination in the fronted. I want to get all data with 10 record per page. Database table name is Player_account_flow and store and stored procedure name is also given. I am mapping my db model when the data load.  
using (SqlConnection conn = dbContext.Database.GetDbConnection() as SqlConnection)
{
    conn.Open();                    
    using (SqlCommand cmd = new SqlCommand())
    {
        cmd.Connection = conn;
        cmd.CommandText = "Pro_GetPageData"; 
        cmd.CommandType = CommandType.StoredProcedure; 
        // input parameters to procedure
        cmd.Parameters.AddWithValue("@TableName", "Player_Account_Flow"); 
        cmd.Parameters.AddWithValue("@OrderString", "Create_Time Desc"); 
        cmd.Parameters.AddWithValue("@ReFieldsStr", "*");
        cmd.Parameters.AddWithValue("@PageIndex", 1); 
        cmd.Parameters.AddWithValue("@PageSize", 10); 
        cmd.Parameters.AddWithValue("@WhereString", query);                                        
        cmd.Parameters.AddWithValue("@TotalRecord", SqlDbType.Int); 
        cmd.Parameters["@TotalRecord"].Direction = ParameterDirection.Output; 
        using (var reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                var map = new PlayerAccountFlow();
                map.Id = (Int32)reader["Id"];
                map.AccountId = (Int32)reader["AccountId"];
                map.Type = (byte)reader["Type"];
                map.BeforeAmout = (decimal)reader["BeforeAmout"];
                map.AfterAmout = (decimal)reader["AfterAmout"];
                map.Amout = (decimal)reader["Amout"];
                map.Source = (Int32)reader["Source"];
                map.Memo = reader["Memo"].ToString();                            
                map.CreateTime = (DateTime)reader["Create_Time"];
                playerAccountFlowsList.Add(map);
            }
        }
        obj = cmd.Parameters["@TotalRecord"].Value;
    }
}
PagingData<PlayerAccountFlow> pagingData = new PagingData<PlayerAccountFlow>();
pagingData.Countnum = (Int32)obj;
pagingData.Data = playerAccountFlowsList;
return pagingData;
 
     
     
    