ASP中處置#include

來源:互聯網
上載者:User

ASP中處理#include

ASP中處理#include

在ASP中處理#include 檔案與用編譯進階程式設計語言,如C/C++處理包含檔案,這兩種方法之間有兩個主要區別。 
第一,ASP不從最終形成的ASP檔案中移走那些未涉及到的資訊。這是因為ASP獨立於指令碼引擎,不過多地進行代碼 
分析。大體說來,如果遇到了ASP檔案的基本文法請求,資訊就被緩衝(假定緩衝器是開啟的)並被發送到適當 
的指令碼引擎,進行進一步的分解、標記及執行。


除了這個“死碼”問題,ASP包含檔案與編譯語言之間的另一個區別在於:每個ASP檔案都可以被看作它自己 
的程式。只要一個頁面不包含另一個,在ASP的意義上看來它們就沒有關係,儘管二者對整個網站的運行都很 
關鍵。因此,被兩個不同頁面所共用的一個#include 檔案必須要被兩個檔案都完全包含。從本質上說,ASP不具 
備許多進階語言所具備的連接器的優勢,連接器可以用來避免包含檔案中代碼和資料的冗餘。


如果把我所概括的ASP包含檔案的問題組合起來,結論就是:它對一個大型網站的記憶體將是破壞性的。想象 
一下這種情況:一個包含檔案中包含了可能要用到的所有共用程式。按照這種設計,導致的結果是所有的ASP頁 
都必須包含這一關鍵的檔案。如果EverythingButTheKitchenSink.inc 經過分解之後與ASP檔案的平均長度相同, 
那麼被ASP分配並為緩衝的ASP檔案使用的記憶體中的一半都充滿了本來多餘沒用的資訊。

813


調用NT Task Manager/Processes 可以看到正被網站所使用著的記憶體,並觀察一下多少記憶體是由mtx.exe 
(如果網站被設定成獨立的程式在IIS4上運行),dllhost.exe (如果網站被設定成獨立的程式在IIS5上運行), 
或是inetinfo.exe (如果不是獨立的,見下面的圖)這些程式所使用。想要掌握記憶體增加得有多快,一個很好的 
測試方法是啟動IIS後調用一個簡單的頁面來看看記憶體的大小。(看記憶體之前要調用一個ASP檔案,因為在處理第 
一個ASP檔案時要建立一些普通的通用檔案)。現在在你的網站上使用其它ASP檔案,並監控每一個被使用的ASP文 
件對記憶體的作用。

 

比如說我建立了ASP檔案。第一個檔案RunFirst.asp,是一個小檔案,在觀察記憶體之前初始化ASP資源。另外 
兩個檔案除了它們所要使用的#include 檔案資訊不同以外,是完全一樣的。將這些檔案複製到你的wwwroot目錄下, 
然後按順序運行RunFirst.asp, HelloWorld1.asp和 HelloWorld2.asp,執行HelloWorld1.asp和HelloWorld2.asp 
之後觀察記憶體,你會發現後者使用了更多的記憶體。這是因為它使用的#include 檔案中有一個很大的未使用的程式, 
BigAndUnreferenced, 它對頁面的運行結果沒有任何作用,但卻佔據了400K的記憶體。在Windows 2000 Server 
w/ IIS5 上依次進行下列步驟得到的結果是:

運行RunFirst.asp 後記憶體6,104K 
運行HelloWorld1.asp後記憶體 6,124K 
運行HelloWorld2.asp後記憶體 6,544K

僅僅按照這個順序沒有什麼明顯的意義,顛倒裝載順序之後的結果是:

運行 RunFirst.asp 後記憶體6,096K 
運行 HelloWorld2.asp後記憶體 6,536K 
運行 HelloWorld1.asp 後記憶體6,540K

請注意開始和結束的記憶體數不完全一致,因為記憶體管理器根據最近的請求大塊地分配記憶體。但是相對而言, 
最終的輪廓總是HelloWorld2.asp 佔據大塊的記憶體份額。本文結尾處可以下載這些簡短的代碼。瀏覽以下這些 
代碼,但要分清記憶體的不同:

RunFirst.asp 是這樣的:

< %@ LANGUAGE="VBSCRIPT" % > 
< HTML > 
< HEAD >< TITLE >Seed Page to load general ASP resources< /TITLE >< HEAD > 
< BODY > 
< % 
Response.Write "Seed Page Loaded" 
% > 
< /BODY > 
< /HTML >

HelloWorld1.asp 是這樣的:

< %@ LANGUAGE="VBSCRIPT" % > 
< !--#include virtual ="/HelloWorld1.inc"-- > 
< HTML > 
< HEAD >< TITLE >Hello World using little memory< /TITLE >< HEAD > 
< BODY > 
< % 
SayHello 
% > 
< /BODY > 
< /HTML >


HelloWorld1.inc代碼是:

< % 
Sub SayHello 
Response.Write "Hello World 1" 
End Sub 
% >


HelloWorld2.asp代碼是:

< %@ LANGUAGE="VBSCRIPT" % > 
< !--#include virtual ="/HelloWorld2.inc"-- > 
< HTML > 
< HEAD >< TITLE >Hello World using a lot of memory< /TITLE >< HEAD > 
< BODY > 
< % 
SayHello 
% > 
< /BODY > 
< /HTML >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.