2010-11-12 36 views
2

假設我們有一個ASPX/PHP文件作爲REST服務,只是在頁面加載時我們使用switch case來引導用戶到所需的函數並返回一些值。我的問題是,如果這個頁面的功能超過1000,這是否會影響性能和響應時間?ASPX/PHP頁面大小有很多開關情況會影響性能

示例代碼可能是這樣的:

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

我不會擔心性能,更關心可維護性和可讀性。 1000個案例?!這種切換不能以另一種更合乎邏輯的方式完成嗎? – deceze 2010-11-12 09:51:23

+0

我知道它起初看起來很奇怪,但我需要將所有功能放在一個頁面中作爲項目需求。似乎KBoek有更好的代碼時尚提供... – 2010-11-12 10:21:06

回答

2

如何使用字典<字符串,字符串>包含所有的函數,然後使用反射來執行相應的方法?不確定的表現,但更整潔。你的字典應該是靜態的,並且在你的業務邏輯中的某個地方,這樣你就不必在每個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可能值「功能」]有自己的方法。這就要求你有方法名稱,它與函數思想完全相同,這並不總是理想的。

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

我沒有測試此代碼,因此它可能需要小的調整功能,但目的是提出一個概念性的解決方案。

+0

看起來很有前途的KBoek。我對第二個代碼塊感興趣。 humm,但是表現如何。如果有100個函數並且用戶請求了TheLastFunctionInThePage()方法? – 2010-11-12 10:17:35

+0

至於第一個代碼塊,字典查找可能會影響性能,但Dictionary中的1000個項目聽起來沒什麼可擔心的。第二個代碼塊的性能僅受Reflection影響(查找基於字符串值的方法)。 – KBoek 2010-11-12 10:25:50

+0

如果這是您的AV軟件如何匹配模式,則需要一週的時間才能加載每個文件。如果我們在這裏談論PHP,爲什麼不呢:<?php include_once($ some_base_path。$ function)或die('imlpemented'); ?> – symcbean 2010-11-12 12:36:24

0

當然,當然它的速度較慢處理達比說1000度情況的條件下,10

如果這是你在做什麼,與顯示使用平均MVC框架構建的網頁的處理量相比,可能還不夠。

重要的問題是,這是如何在現實世界中執行,但?你有沒有注意到有性能問題?我會嘗試對它進行負載測試,看看響應時間是否過長。

+0

亞歷克斯我正在等待測試結果:)真的很感謝努力:) – 2010-11-12 10:18:16

相關問題