Consigli sulle prestazioni del programma dopo le modifiche

0

Quindi, la situazione è la seguente: Negli ultimi due anni, ho implementato una classe in c # che viene utilizzata per filtrare diversi campi da diverse tabelle nel database (SQL), a fini di reporting. Ora vorrei ridurre al minimo il codice e la query, e mi piacerebbe fare le seguenti implementazioni:

1) Tutte le query di base verranno implementate come stored procedure e la clausola "where" più altri filtri verranno passati come un parametro. Fino a qui tutto va bene, dal momento che ho effettuato alcuni test e indipendentemente dalle condizioni che ho inserito (manualmente ovviamente), il parametro è impostato e letto come dovrebbe.

2) Nel codice, vorrei minimizzare il codice, passando i filtri in un singolo array, e quindi il parametro della stored procedure sarebbe una concatenazione di stringa di tutti i valori dell'array. Il pannello dei filtri è composto da 2 caselle di testo (filtro data), 4 caselle di elenco (utente creatore, paese, tipo di cliente (personale, cliente, promozionale ecc.) E prodotto) che ovviamente hanno la possibilità di scelte multiple e un controllo box list (che determina se il client è stato bannato o meno dal servizio). L'elenco check-box ha anche la possibilità di scelta multipla. Per essere più chiaro, implemento la ricerca listbox come segue:

public static String Country_Where_ListBox(ListBox ListBox1)
        {
            List<string> result = new List<string>();
            string value = "";
            int j;

                for (int i = 0; i < ListBox1.Items.Count; i++)
                {
                    if (ListBox1.Items[i].Selected)
                        result.Add(ListBox1.Items[i].Text);
                }
                if ((result.Count == 0) || (ListBox1.SelectedItem.Text == "All"))
                    value = "";
                else
                {
                value = "and (login.country='" + result[0] + "'";

                for (j = 1; j < result.Count; j++)
                {
                    value += " or login.country = '" + result[j] + "'";

                }
                value += ")";
            }
            return value;
        }

La stessa logica è valida per le altre caselle di elenco. Per l'elenco delle caselle di controllo l'implementazione è la seguente:

 public static String Where_CheckboxList(CheckBoxList chL)
        {
            List<String> list = new List<String>();
            string value = "";
            for (int i =0; i< chL.Items.Count;i++)
            {
                if (chL.Items[i].Selected)
                {
                    list.Add(chL.Items[i].Text);
                }
            }
            if (list.Count == 2 || list.Count == 0)
            { value = ""; }
            else
            {
                if (list[0].ToString() == "Locked")
                    value = " and cte.CC=1 ";
                else
                    value = " and cte.CC>1 ";

            }
            return value ;
        }

E dopo aver eseguito tutti questi calcoli, chiamo l'intera query come segue:

sql = baseSql  + QueryManagement.Where_Query(TextBox2, TextBox3, ListBox2, ListBox3, ListBox4, ListBox1);

La mia preoccupazione è che se chiamo questo risultato per riempire l'array (in 3 caselle di elenco faccio scorrere gli elementi per ottenere i risultati), e quindi iterò nuovamente l'array per catturare gli elementi, ci saranno seri problemi di prestazioni , perché circa il 50% dell'intera applicazione Web è costituito da report e filtri come descritto sopra. Esiste qualche pratica migliore in casi simili o esiste un modo per accelerare le prestazioni?

    
posta Ange1 29.01.2016 - 12:39
fonte

0 risposte

Leggi altre domande sui tag