Per recuperare il numero degli items di una lists per una determinata Query, eventualmente creata a run time, la sintassi base che uno scriverebbe è la seguente:
int ItemCount;
SPQuery query = new SPQuery();
query.Query = view.Query;
ItemCount = list.GetItems(query).Count;
da questo snippet ho omesso il RowLimit perchè altrimenti non avrei una Count valida, supponendo di creare un paginatore.
Ma qui ho riscontrato un enorme problema, i tempi di risposta, perchè il GetItems anche se alla fine richiediamo il Count comunque restituisce tutti gli items e poi ritorna il totale, ho notato che già con 3000 items i tempi di attesa si aggirano sui 10/14 secondi (un botto!!!).
La soluzione è banalissima, comunque siamo costretti a fare il GetItems, ma considerato che abbiamo necessità solo di una Count cerchiamo di minimizzare il tutto e quindi nella mia query specificherò che i ViewFields dovranno essere solamente 1 cioè l'ID (numerico), quindi insieme allo snippet di prima aggiungeremo anche:
query.ViewFields = "<FieldRef Name='ID' />";
Kid's stuff
Bene, dopo una giornata intera a cercare di effetture un deploy della solution di SharePoint tramite Visual Studio ma con scarsissimi risultati (vedi titolo del POST) ho trovato nella rete la seguente procedura:
Apri il RegEdit.exe
vai nel folder HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\10.0\SharePointTools
aggiungere se non esiste la chiave
ChannelOperationTimeout
REG_DWORD
Decimal -> 800 (il valore è in secondi)
Kid's stuff ;)