Я использую jquery datatables для отображения сетки, которая использует webapi для извлечения данных. Webapi использует linq для запроса базы данных mssql, и он аккуратно использует фильтрацию, сортировку и пропустить/принять, чтобы собрать запрос на хорошо проиндексированную таблицу, содержащую около миллиона записей (и увеличиваясь). Общий сценарий.Получить SELECT COUNT асинхронно непрерывно
И он работает очень хорошо. Браузер должен подождать около 50 мс для ответа (например, для разбивки на страницы) для возврата.
Однако после того, как я посмотрел с помощью профилирующего инструмента, я заметил около 25 мс, который будет использоваться, просто выбирая общий вес таблицы. Который я хочу знать, потому что я хочу, чтобы datatable отображал что-то вроде: «отображение строки с 1 по 10 из 45.000, отфильтрованной из 1.000.000», которая нуждается в общем счете.
На самом деле мне не нужно знать точное общее количество (это просто информативное) каждую поездку с сервера, поэтому я, возможно, могу сохранить значение на стороне сервера и обновлять его каждую секунду в другой задаче, не мешая данным извлечение данных. Я бы просто вернул значение «достаточно близко» для общего количества строк.
Есть ли для этого твердый механизм? Я попытался поместить общее число строк в статике, используемое несколькими пользователями во время нескольких обратных вызовов, и каждый раз, когда он запрашивался, была запущена асинхронная задача, чтобы обновить ее.
Это, однако, нехорошо, но, используя статику и имеющую другое обновление нити, оно не кажется мне таким стабильным. Я посмотрел на SqlDependency, чтобы подталкивать показатель записи каждый раз, когда он изменяется от моих данных к моей модели домена, но, похоже, не поддерживает сценарии SELECT COUNT (Id) FROM TABLE.
Любые мысли?
Что об использовании [MemoryCache] (http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache (V = vs.110) .aspx) запись с абсолютным истечением? –
Конечно, лучше, чем статичный в веб-сценарии. Я согласен, но как обновить это стабильным образом. –
Что вы подразумеваете под «стабильным»? Одним из вариантов обновления было бы добавить его с помощью 'CacheItemPolicy', который включает в себя' RemovedCallback', который заставит вызов снова получить счет. –