Обработка функции, занимающей много времени. - PullRequest
1 голос
/ 29 марта 2012

У меня есть функция, выполнение которой занимает много времени в веб-приложении.

Я проверил это с помощью профилировщика и своей регистрации.

У меня запущены другие функциив той же загрузке страницы.

Каков наилучший способ отобразить остальные значения из этих функций и сохранить эту функцию в потоке и отобразить ее в метке после ее завершения?

ЭтоФункция используется для получения событий в приложении, что занимает время.

private void getEventErrors()
    {
        EventLog eventLog = new EventLog("Application", ".");

        getEvents(eventLog.Entries);
    }

private void getEvents(EventLogEntryCollection eventLogEntryCollection)
    {
        int errorEvents = 0;

        foreach (EventLogEntry logEntry in eventLogEntryCollection)
        {
            if (logEntry.Source.Equals("XYZ"))
            {
                DateTime variable = Convert.ToDateTime(logEntry.TimeWritten);
                long eventTimeTicks = (variable.Ticks);
                long eventTimeUTC = (eventTimeTicks - 621355968000000000) / 10000000;

                long presentDayTicks = DateTime.Now.Ticks;
                long daysBackSeconds = ((presentDayTicks - 864000000000) - 621355968000000000) / 10000000;


                if (eventTimeUTC > daysBackSeconds)
                {
                    if (logEntry.EntryType.ToString() == "Error")
                    {
                        errorEvents = errorEvents + 1;
                    }                        
                }
            }
        }
        btn_Link_Event_Errors_Val.Text = errorEvents.ToString(GUIUtility.TWO_DECIMAL_PT_FORMAT);            
        if (errorEvents == 0)
        {
            lbl_EventErrorColor.Attributes.Clear();
            lbl_EventErrorColor.Attributes.Add("class", "green");
        }
        else
        {
            lbl_EventErrorColor.Attributes.Clear();
            lbl_EventErrorColor.Attributes.Add("class", "red");
        }
    }

У меня есть 3 функции в событии загрузки страницы, две для получения значений из БД, а другая показана выше.

Должны ли обе эти функции быть служебными вызовами?

Что я хотел, так это то, что страница должна загружаться быстро, и если есть функция, занимающая много времени, она должна работать в фоновом режиме и отображаться, когдасделано и в процессе, если пользователь хочет перейти на новую страницу, он должен убить ее и двигаться дальше.

1 Ответ

2 голосов
/ 29 марта 2012

Если у вас есть функция, которая выполняется в отдельном потоке в ASP.NET, вы можете рассмотреть возможность ее перемещения в службу.Есть много причин для этого

См. этот ответ (один из многих на SO) о том, почему запуск долго выполняющихся задач в ASP.NET не всегда является хорошей идеей.

Одним из вариантов сервиса является использование WCF.Вы можете начать здесь .Ваш сервис может реализовать метод, скажем GetEvents(), который вы можете использовать для извлечения ваших событий.Таким образом, вы не будете связывать свою страницу, ожидая завершения этого процесса (конечно, используя AJAX).Кроме того, это позволяет изменить реализацию GetEvents(), не затрагивая код на своем веб-сайте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...