Asp.net MVC производительность приложений в реальном времени

1

Я пытаюсь создать веб-приложение asp.net mvc, некоторые страницы должны показывать данные в режиме реального времени, эти данные хранятся в базе данных SQL Server, данные меняются всегда, я создал хранимую процедуру на сервере sql, Я вызываю эту процедуру в своем контроллере, используя фреймворк Entity, и отправляю результат в браузер с помощью ajax i, используемого для вывода данных, чтобы свести к минимуму количество выполняемых хранимых процедур, в том же контроллере существует несколько методов, которые используют одну и ту же хранимую процедуру, каждый метод выполняет ту же процедуру, как повысить эффективность моего приложения, есть ли способ выполнить хранимую процедуру только один раз для всего контроллера?

это мой контроллер, моя цель - свести к минимуму использование базы данных

   [OutputCache(Duration = 20, VaryByParam = "*")]
public class JobsETLController : Controller
{

    private ETL_REP_MAUIEntities db = new ETL_REP_MAUIEntities();
    public   ObjectResult<BIOGetETLJobs_Result> ETLJobs;

    public JobsETLController()
    {


        ETLJobs =db.BIOGetETLJobs();


    }

    public ActionResult Indexp()
    {

        var y = from xx in ETLJobs
             where xx.etat!="Completed"
             orderby xx.etat ascending
                select xx;
        return PartialView(y);
}



    public ActionResult IndexpAll()
    {

        var y = from xx in ETLJobs
                    where xx.etat == "Completed"
                select xx;
        return PartialView(y);
    }
  • 0
    мое приложение обнаруживает изменения в какой-либо таблице в базе данных и уведомляет пользователя, содержание этих таблиц постоянно меняется
  • 1
    Вместо того, чтобы использовать опрос, подумайте об использовании «толкающей» модели, которую может предоставить вам нечто вроде веб-сокетов. Ваше приложение может настроить SqlDependency. Ваша заявка будет уведомлена о любых изменениях в запросе к базе данных, который вы отслеживаете, и вы можете использовать SignalR для уведомления своих клиентов ... techbrij.com/…
Показать ещё 1 комментарий
Теги:
sql-server
entity-framework
asp.net-mvc

1 ответ

1
Лучший ответ

Если ваш сервер не находится в веб-ферме (несколько серверов), вы можете кэшировать данные в кэше Asp.net (это не кеширование вывода, а кэширование данных). Вы просто устанавливаете 5-минутное ограничение по истечении срока действия данных (вы говорите, что данные должны обновляться каждые 5 минут), так что, когда контроллеру нужны данные, он сначала проверяет кеш, и если он там не будет, он выполнит хранимая процедура.

MyData items;

items = (MyData)Cache["MyData"];
if(items == null)
{
   items = DoQueryToReturnItems();
   Cache.Add("MyData", items, null, DateTime.Now.AddMinutes(5), ..);
}

Даже можно настроить элемент кэша на зависимость от SqlDependency, чтобы при изменении данных кеш мог быть обновлен.

  • 0
    Спасибо, это именно то, что я хотел, но я не понял ваш пример, не могли бы вы показать мне, как кэшировать ETLJobs = db.BIOGetETLJobs (); в приведенном выше примере ??
  • 0
    @ user3489866 - Я действительно не уверен, как это может быть яснее, я привел вам пример .. Вы должны будете выяснить остальные значения, потому что только вы знаете, какими они должны быть. Замени MyData своими собственными данными

Ещё вопросы

Сообщество Overcoder
Наверх
Меню