none
asp及asp.net的連線速度? RRS feed

  • 問題

  • 請教各位前輩:

     

    先描述一下環境

    1.總公司在台北,分點在新竹,採用雙向512K用VPN連到總公司,win2000 Server+SQL2000,用Net2.0開發

    2.同時使用人數約10人

     

    遇到的問題:

    1.我用.net的改寫舊的asp程式,User反應"連線速率"(畫面出現的時間)比舊版的asp還慢,但我在總公司(和伺服器相同的地點)測試,連線速率會快上許多,請問是否因為VPN的網路連線速率的關係,造成.Net的程式在傳輸資料時反而比asp慢?是否因為.Net是全部頁面產生完後再開始傳資料,asp是直接傳資料,所以會造成這種現象?有方法可以解決嗎?

     

    2.為了解決1的問題,我本來的Net程式是把Select的命令寫在dataSource中,後來把Select的指令改成用預存程序,再由dataSource呼叫,但改了之後,User反應是"更慢",這是為什麼呢?

     

    謝謝解答。

    2008年6月25日 上午 04:42

解答

  • 1.
    同樣的頁面
    asp 的輸出網頁的size
    通常會遠比 asp.net的還小
    因為 asp 沒有夾帶 VIEWSTATE
    VIEWSTATE 是表單越複雜, 其Size越龐大, 甚至可以高達數百KB
    如果你還是懷疑ASP.NET的輸出Buff機制的話, 你可以試著關掉它
    Code Snippet

    this.Response.BufferOutput = false;




    2.你的效能瓶頸應該在輸出的網頁Szie
    而非資料庫
    所以效能應該是不會改善
    至於用SQL預存程序變更慢
    那可能是你的SQL預存程序沒寫好吧?
    (如果你的Web-Server與SQL-Server不是在同一台的話, 或許有可能對效能延遲一些, 但應該感覺不出來)
    2008年6月25日 上午 06:07
  • 1.

    VPN 的傳輸因為會經過加密與解密程序,時間上本來就會有延遲,如果不用 VPN 連的話呢?

    當然也有可能是 ASP.NET ViewState 的問題,你可以用 asp 和 asp.net 各寫一個功能完全一樣的,然後跑看看是不是大小差很多,如果是就是 ASP.NET ViewState 的問題,你可能要試著把一些原本用 ViewState 存的,改用 Session 來存。

     

    2.

    使用者講的往往不會很精準,可能只慢個 1-2 秒,User 也會說很慢,所以最好你自己到分公司走一趟做測試比較妥當(新竹離台北不會很遠,高鐵坐一下 30 分鐘內就會到),因為在 LAN 中測試,無法測出在慢速網路上的存取速度。

     

    3.

    SQL Server 的 SP 會慢,通常都和 SQL 指令本身有關係(資料存取量也是有關係,因為是 I/O 工作),你可能要自己去 try SQL,看看執行計畫,然後修改一下查詢的指令,也許會比原來的更快也說不定。

    2008年6月25日 上午 06:29
    版主

所有回覆

  • 1.
    同樣的頁面
    asp 的輸出網頁的size
    通常會遠比 asp.net的還小
    因為 asp 沒有夾帶 VIEWSTATE
    VIEWSTATE 是表單越複雜, 其Size越龐大, 甚至可以高達數百KB
    如果你還是懷疑ASP.NET的輸出Buff機制的話, 你可以試著關掉它
    Code Snippet

    this.Response.BufferOutput = false;




    2.你的效能瓶頸應該在輸出的網頁Szie
    而非資料庫
    所以效能應該是不會改善
    至於用SQL預存程序變更慢
    那可能是你的SQL預存程序沒寫好吧?
    (如果你的Web-Server與SQL-Server不是在同一台的話, 或許有可能對效能延遲一些, 但應該感覺不出來)
    2008年6月25日 上午 06:07
  •  player555767 寫信:
    1.
    同樣的頁面
    asp 的輸出網頁的size
    通常會遠比 asp.net的還小
    因為 asp 沒有夾帶 VIEWSTATE
    VIEWSTATE 是表單越複雜, 其Size越龐大, 甚至可以高達數百KB
    如果你還是懷疑ASP.NET的輸出Buff機制的話, 你可以試著關掉它
    Code Snippet

    this.Response.BufferOutput = false;


    請教一下,

     1.是在頁面的Page 設定 Buffer=False,就可以了嗎?

     2.有沒有測試工具可以得知網頁傳輸到Client端的Size?我想您的推論是正確的。

    2.你的效能瓶頸應該在輸出的網頁Szie
    而非資料庫
    所以效能應該是不會改善
    至於用SQL預存程序變更慢
    那可能是你的SQL預存程序沒寫好吧?
    (如果你的Web-Server與SQL-Server不是在同一台的話, 或許有可能對效能延遲一些, 但應該感覺不出來)

     

    我的預存程序很單純,是很簡單Select指令,直接和原本寫在DataSource的指令一樣,只是改為傳參數去呼叫,但測試結果大約更慢個1到2秒的時間,我本來想法是指令在SQL先編譯過了,所以應該會快一點點,沒想到出乎意料,也想不透原因。

    WebServer和SQLServer是同一台。

     

    2008年6月25日 上午 06:19
  • 1.

    VPN 的傳輸因為會經過加密與解密程序,時間上本來就會有延遲,如果不用 VPN 連的話呢?

    當然也有可能是 ASP.NET ViewState 的問題,你可以用 asp 和 asp.net 各寫一個功能完全一樣的,然後跑看看是不是大小差很多,如果是就是 ASP.NET ViewState 的問題,你可能要試著把一些原本用 ViewState 存的,改用 Session 來存。

     

    2.

    使用者講的往往不會很精準,可能只慢個 1-2 秒,User 也會說很慢,所以最好你自己到分公司走一趟做測試比較妥當(新竹離台北不會很遠,高鐵坐一下 30 分鐘內就會到),因為在 LAN 中測試,無法測出在慢速網路上的存取速度。

     

    3.

    SQL Server 的 SP 會慢,通常都和 SQL 指令本身有關係(資料存取量也是有關係,因為是 I/O 工作),你可能要自己去 try SQL,看看執行計畫,然後修改一下查詢的指令,也許會比原來的更快也說不定。

    2008年6月25日 上午 06:29
    版主
  •  

    1.

    VPN 的傳輸因為會經過加密與解密程序,時間上本來就會有延遲,如果不用 VPN 連的話呢?

    當然也有可能是 ASP.NET ViewState 的問題,你可以用 asp 和 asp.net 各寫一個功能完全一樣的,然後跑看看是不是大小差很多,如果是就是 ASP.NET ViewState 的問題,你可能要試著把一些原本用 ViewState 存的,改用 Session 來存。

     

    原來VPN的傳輸會有加密和解密,我都不知道說...不過原來的asp線路都一樣,但跑Net真的比較慢..我會寫一個asp和asp.net來測試。

     

    2.

    使用者講的往往不會很精準,可能只慢個 1-2 秒,User 也會說很慢,所以最好你自己到分公司走一趟做測試比較妥當(新竹離台北不會很遠,高鐵坐一下 30 分鐘內就會到),因為在 LAN 中測試,無法測出在慢速網路上的存取速度。

     

    我有下去比較過了,結果改寫的程式真的比較慢..慢個1~3秒左右。我以為Net會很快說..害我有點..我當初還和老板說用Net寫的,一定比較快啦...

     

    3.

    SQL Server 的 SP 會慢,通常都和 SQL 指令本身有關係(資料存取量也是有關係,因為是 I/O 工作),你可能要自己去 try SQL,看看執行計畫,然後修改一下查詢的指令,也許會比原來的更快也說不定。

     

    我會測試看看。

    資料存取量也是有關係,因為是 I/O 工作,可是在網頁上的DataSource傳回的量也是一樣的,為何SP的會慢一點點?

     

    謝謝二位前輩的指導。

    2008年6月25日 上午 06:43
  • 1. VPN 有經過封包的加解密, 沒錯, 但連LAN-Game都能透過VPN去玩了, 所以校能的瓶頸通常不會在VPN上
    2.根據個人經驗, 以前在OLG的入口平台上, ASP.NET輸出不到1KB的必要資訊(遊戲帳號,角色名....etc), 結果該網頁卻多包了約15KB的ViewState
    3.你的ASP.NET有記得先編輯過嗎?
    4.IIS的設定有調過嗎?

     

    2008年6月25日 上午 06:54
  • 1. VPN 有經過封包的加解密, 沒錯, 但連LAN-Game都能透過VPN去玩了, 所以校能的瓶頸通常不會在VPN上

    2.根據個人經驗, 以前在OLG的入口平台上, ASP.NET輸出不到1KB的必要資訊(遊戲帳號,角色名....etc), 結果該網頁卻多包了約15KB的ViewState

       我會把ViewState關閉試看看,

       請教一下,設定Buffer對程式或對傳輸有何影響?您如何測試網頁的ViewState的大小?

     

    3.你的ASP.NET有記得先編輯過嗎?

      我是用發行網站到一個資料夾,在把這個資料夾上傳到伺服器,這樣Net應該就有算編譯過了,是嗎?


    4.IIS的設定有調過嗎?

      沒有調過耶..您指的是?
    2008年6月25日 上午 07:05
  • 連線速率是屬於硬體架構,不會因為你的軟體而不同;你的問題應該是發生於傳輸量多寡,去查一下相同功能的 ASP 及 ASP.NET 整個頁面 HTML 碼的 size,因為 ASP.NET 有 VIewState,而且只有一個 Form,雙向傳輸量一般都會比 ASP 的網頁大。

     

    ASP.NET 是程式的執行效能比 ASP 好,而輸出的 HTML 碼通常 ASP.NET 會比 ASP 的 size 大。

    2008年6月25日 上午 07:17
  •  

    連線速率是屬於硬體架構,不會因為你的軟體而不同;你的問題應該是發生於傳輸量多寡,去查一下相同功能的 ASP 及 ASP.NET 整個頁面 HTML 碼的 size,因為 ASP.NET 有 VIewState,而且只有一個 Form,雙向傳輸量一般都會比 ASP 的網頁大。

     

    ASP.NET 是程式的執行效能比 ASP 好,而輸出的 HTML 碼通常 ASP.NET 會比 ASP 的 size 大。

     

     

    謝謝 jeff377 前輩

    2008年6月25日 上午 07:30
  • 你的情況讓我回想到幾年前曾經支援過的一家日商公司。我曾經花了一點時間去研究使用單位所反應的狀況, 我發現分公司的使用者是拿視窗應用程式的 Response Time 來比較 Web Form, 所以不管怎麼調整都很難滿意。從我們的立場看, Web Form 效能本來就不如 Windows Form, 但偏偏那個應用程式的做法是需要使用者不停的從資料庫查詢資料 (例如打一個姓, 程式查出所有符合的人名, 再由使用者挑選, 然後再打入單號開頭, 程式送回所有相符訂單, 使用者再挑選), 傳遞的資料量還不小, 所以來回之間非常耗時。

     

    由於分公司的使用者是從台北總公司調過去的, 她早就習慣總公司使用 Windows 程式查詢本地端資料庫的速度, 所以到分公司之後就抱怨連連。我們曾經提出過許多解決方案, 包括在分公司設立一個 Replicate 資料庫。不過那時候還沒有什麼 AJAX, 使用者看到的是一個不時「呆掉」的畫面, 難免失去耐心。如果是現在, 套用 AJAX 之後或許情況會好一點。

     

    我覺得最好能夠教育使用者, 讓他/她明白遠端連結原本就無法像在近端連結一樣快速, 或許這才是最終的解決方案。

    2008年6月25日 上午 07:46
  •  Johnny.Net 寫信:

    你的情況讓我回想到幾年前曾經支援過的一家日商公司。我曾經花了一點時間去研究使用單位所反應的狀況, 我發現分公司的使用者是拿視窗應用程式的 Response Time 來比較 Web Form, 所以不管怎麼調整都很難滿意。從我們的立場看, Web Form 效能本來就不如 Windows Form, 但偏偏那個應用程式的做法是需要使用者不停的從資料庫查詢資料 (例如打一個姓, 程式查出所有符合的人名, 再由使用者挑選, 然後再打入單號開頭, 程式送回所有相符訂單, 使用者再挑選), 傳遞的資料量還不小, 所以來回之間非常耗時。

     

    由於分公司的使用者是從台北總公司調過去的, 她早就習慣總公司使用 Windows 程式查詢本地端資料庫的速度, 所以到分公司之後就抱怨連連。我們曾經提出過許多解決方案, 包括在分公司設立一個 Replicate 資料庫。不過那時候還沒有什麼 AJAX, 使用者看到的是一個不時「呆掉」的畫面, 難免失去耐心。如果是現在, 套用 AJAX 之後或許情況會好一點。

     

    我覺得最好能夠教育使用者, 讓他/她明白遠端連結原本就無法像在近端連結一樣快速, 或許這才是最終的解決方案。

     

    不知您後來如何解決的呢?那位User接受建議了嗎?

    2008年6月25日 上午 07:54
  • 呃... 說來有點不好意思... 我記得我們最後提出的建議是掛一個 Replicate 資料庫, 但他們老闆為省錢而否決了。所以後來似乎是不了了之 (剛好沒多久後我也離職了, 所以不清楚後續狀況)。但如果是現在的話, 我會建議加上 AJAX, 或許使用者能夠接受。

    2008年6月25日 上午 07:59
  • 大部分老板會以省錢為優先方案,謝謝您的留言。

     

    2008年6月25日 上午 08:03
  • 各位前輩:

    1.我有試著改Buffer的設定,不過速度沒有影響

    2.有做asp和asp.net的比較,asp的網頁size比較小,所以會比較快顯示頁面

    3.我在page把viewstate關閉,結果執行命令時會出現錯誤訊息。

     

    請問如果是viewState的關係,有辦法可以克服嗎?

    2008年6月30日 上午 01:46
  • 這個要看你的網頁是怎麼寫的。

    你可以把不需要做 PostBack 的控制項,設定 EnableViewState=false 來降低 ViewState 的使用。

     

    2008年6月30日 上午 02:32
    版主
  • 我再試看看,謝謝各位前輩的指導。

     

    2008年6月30日 上午 02:36