C# 处理一个函数需要花费大量的时间

C# 处理一个函数需要花费大量的时间,c#,asp.net,multithreading,performance,C#,Asp.net,Multithreading,Performance,我有一个函数,在web应用程序中执行它需要很多时间 我已经用一个分析器和我的日志对其进行了测试 我有其他功能在同一页面加载中运行 显示这些函数的其余值并将此函数保存在线程中,并在完成时显示在标签中的最佳方法是什么 此函数用于获取应用程序中需要时间的事件 private void getEventErrors() { EventLog eventLog = new EventLog("Application", "."); getEvents(eventL

我有一个函数,在web应用程序中执行它需要很多时间

我已经用一个分析器和我的日志对其进行了测试

我有其他功能在同一页面加载中运行

显示这些函数的其余值并将此函数保存在线程中,并在完成时显示在标签中的最佳方法是什么

此函数用于获取应用程序中需要时间的事件

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");
        }
    }

我在pageload事件中有3个函数,两个用于从DB获取值,另一个如上图所示

这两个函数都应该是服务调用吗


我想要的是,页面应该加载得很快,如果有一个函数需要花费很多时间,那么它应该在后台运行,并在完成时显示;如果用户想要导航到一个新页面,那么它应该关闭它并继续前进。

如果您有一个函数在ASP.NET中的一个单独线程中运行,您可能想考虑将其移动到服务。这有很多原因

有关为什么在ASP.NET中运行长时间运行的任务并不总是一个好主意,请参阅答案(众多答案之一)


该服务的一个选项是使用WCF。你可以开始了。您的服务可以实现一个方法,比如
GetEvents()
,您可以使用它来获取事件。这样,您就不会在等待该过程完成时占用页面(当然使用AJAX)。此外,这允许您更改
GetEvents()
的实现,而无需触碰网站上的代码。

将其移动到所属的服务并进行AJAX调用如何?将其移动到服务。。?对不起,你能不能说得更清楚一点,因为我是新来的。我还没有开始实现AJAX。举个例子会很有帮助。ThnaksBUT调用服务方法将花费相同的时间。我在pageload事件中有3个函数,两个用于从DB获取值,另一个如上所示。这两个函数都应该是服务调用。我想要的是,页面应该加载得很快,如果有一个函数需要花费很多时间,它应该在后台运行,完成后显示。在这个过程中,如果用户想要导航到一个新的页面,它应该杀死它并继续运行。您还可以考虑一些类型的分页或机制来检索较小数量的条目。您真的需要同时查看它们吗?是的,这是仪表板页面,因此需要在事件日志中显示事件错误的数量,以及用户和机器的数量。表单DB。@user175084:可以。我的观点是,您可能只想加载特定的页面大小并将其返回给用户。Windows事件日志的问题通常是访问速度相当慢。它更像是一种事后检验工具,而不是通过应用程序进行实时阅读。你确定你使用的工具适合这份工作吗?您可能需要重新思考您的架构。