具有许多交换机案例的ASPX / PHP页面大小是否会影响性能

时间:2010-11-12 09:34:02

标签: php asp.net performance

假设我们有一个ASPX / PHP文件作为REST服务,只是在页面加载中我们使用switch case将用户引导到所需的函数并返回一些值。我的问题是,如果这个页面的功能超过1000,那么这会影响性能和响应时间吗?

示例代码可能是这样的:

    protected void Page_Load(object sender, EventArgs e) {
    try {
        string ServiceOutput = "";
        string Function = Request.Form["Function"];
        switch (Function) {
            case "GetPluginsInfo":
                ServiceOutput = GetPluginsInfo();
                break;

            case "demo":
                ServiceOutput = Request.Form["Message"];
                break;

                 .
                 .
                 .
                 .

        }
        Response.Write(ServiceOutput);
    }
    catch (Exception Error) {
        Response.Write(Error.Message);
    }
}

2 个答案:

答案 0 :(得分:2)

如何使用Dictionary< string,string>包含所有函数,然后使用Reflection执行相应的方法?不确定性能,但更整洁。您的词典应该是静态的,并且在您的业务逻辑中的某个位置,这样您就不必在每个PostBack中填充它。

static Dictionary<string, string> AllFunctions;

protected void Page_Load()
{
  string ServiceOutput;

  var function = Request["Function"];
  var method   = AllFunctions[function];
  var output   = GetType().GetMethod(method).Invoke(this, null);

  ServiceOutput = output;
}

如果填充字典和/或查找速度很慢,您甚至可以找到一个解决方案,其中Request.Form [“Function”]中的每个可能值都有自己的方法。这将要求您拥有与函数思想完全相同的方法名称,这并不总是理想的。

static Dictionary<string, string> AllFunctions;

protected void Page_Load()
{
  var ServiceOutput = GetType().GetMethod(Request["Function"]).Invoke(this, null);
}

// this would require you to have a method like this:
public string GetPluginsInfo()
{
  return "This is the result";
}

public string demo()
{
  return "You requested a demo";
}

我没有测试此代码,因此可能需要对功能进行小幅调整,但目的是提出一个概念性解决方案。

答案 1 :(得分:0)

当然,处理多达1000个案例的情况当然比说10更慢。

如果这就是你正在做的事情,那么与显示使用普通MVC框架构建的网页的处理量相比,它可能没什么用。

重要的问题是,这在现实世界中表现如何?您是否注意到存在性能问题?我会尝试对其进行负载测试,看看响应时间是否过长。