Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 需要C编码建议(效率)_Asp.net_C# 2.0 - Fatal编程技术网

Asp.net 需要C编码建议(效率)

Asp.net 需要C编码建议(效率),asp.net,c#-2.0,Asp.net,C# 2.0,在我的代码中,我有一个下拉选择,当从下拉选择时,代码执行进一步的处理并生成报告/数据 此外,整个程序依赖于从3个不同操作中收集的数据 Operation1: processing a text files of size of size > 6MB Operation2: SQL Query to a DB (Query takes around 1 minute) Operation 3: HTTP POST request to server (The main costliest

在我的代码中,我有一个下拉选择,当从下拉选择时,代码执行进一步的处理并生成报告/数据

此外,整个程序依赖于从3个不同操作中收集的数据

Operation1: processing a text files of size of size > 6MB

Operation2: SQL Query to a DB (Query takes around 1 minute)

Operation 3: HTTP POST request to server (The main costliest part of the programe)
因此,为了提高效率,我想只执行一次此操作,并使用下拉列表中所有不同选择的数据

问题是我如何做到以下几点:

我不能把它放在page_load事件中,因为每次page load操作都会执行

我无法将其放入dropdownlist\u selectedindexchanged事件中,因为这样它将与1相同

我想在页面加载中这样做,如下所示

这很好;这些操作只执行一次,我可以在整个过程中使用数据,但由于操作需要时间,因此我的页面将需要时间加载

有没有其他方法可以实现我想要的?请让我知道

谢谢,
Rahul

如果数据集不会更改,您可能可以在应用程序启动时进行一次更改

编辑-类似这样从内存中键入,远离VS,我使用VB:

Protected void page_load(object sender, eventargs e)
{
    // the name can be anything
    if (!System.Web.HttpContext.Current.Session["data_cache_filled"])
    {
        // code to fill the cache.
        // ...

        //mark it as filled
        System.Web.HttpContext.Current.Session["data_cache_filled"] = "yes";
    }

}
缓存它。使用CacheHelper类,您可以执行以下操作:

internal List<Employee> Operation1()
{
  List<Employee> employeeData;

  if (!CacheHelper.Get("employeeData", out employeeData))
  {
    employeeData = (from x in db.Employees select x).ToList(); // or whatever

    CacheHelper.Add(employeeData, "employeeData");
  }

  return employeeData;
}

@罗德里戈,如果我错了,请纠正我,但我认为把它放在应用程序中会影响整个应用程序。。。意味着如果执行3个操作需要3分钟,那么加载应用程序需要3分钟。谢谢,开始需要3分钟,就一次。当然,您将缓存结果,因此您不需要在每个HttpApplication中只加载一次结果@罗德里戈,非常感谢你的回复,这太棒了。。。似乎是我一直在寻找的,但我也看到了一个缺点。。。从MSDN链接中,我发现当从服务器请求第一个资源时,应用程序只启动一次。。。这也带来了一点。。。即使有人实际上没有试图访问我的页面。。。此操作将无效执行。我的页面是整个web应用程序的一小部分,我将在其中插入它。然后,您必须在页面加载事件中触发缓存插入。您可以创建一个类似IsCacheFilled的会话变量来判断缓存是否已被填充。然后,在每次加载页面上,检查此会话变量,如果已设置,则不会再次加载数据。如果它被清除,这意味着它是第一次访问您的页面,然后您加载它。@Rodrigo,很抱歉打扰您。。。我可能没有问这个问题,但如果你能提供一个小的代码样本,这将真正有帮助。。。我几乎是C的新手。谢谢。
internal List<Employee> Operation1()
{
  List<Employee> employeeData;

  if (!CacheHelper.Get("employeeData", out employeeData))
  {
    employeeData = (from x in db.Employees select x).ToList(); // or whatever

    CacheHelper.Add(employeeData, "employeeData");
  }

  return employeeData;
}