假设我们有一个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);
}
}
答案 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框架构建的网页的处理量相比,它可能没什么用。
重要的问题是,这在现实世界中表现如何?您是否注意到存在性能问题?我会尝试对其进行负载测试,看看响应时间是否过长。