熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

詳解.NET中的動態編譯技術[2]

2013-11-13 10:47:16  來源: .NET編程 

  需要解釋的是這裡我們在傳遞編譯參數時設置了GenerateInMemory為true這表明生成的DLL會被加載在內存中(隨後被默認引用入當前應用程序域)在調用GetTime方法時我們需要加入參數傳遞object類型的數組並通過Reflection的InvokeMember來調用在創建生成的Assembly中的對象實例時需要注意用到的命名空間是你輸入代碼的真實命名空間以下是我們輸入的測試代碼(為了方便所有的代碼都在外部輸入動態執行時不做調整)

using System;
namespace Dynamicly
{
    public class HelloWorld
    {
        public string GetTime(string strName)
        {
            return  Welcome + strName + Check in at + SystemDateTimeNowToString();
        }
    }
}

  運行附件中提供的程序可以很容易得到一下結果

  改進的執行過程

  現在一切看起來很好我們可以編譯代碼並把代碼加載到當前應用程序域中來參與我們的活動但你是否想過去卸載掉這段程序呢?更好的去控制程序呢?另外當你運行這個程序很多遍的時候你會發現占用內存很大而且每次執行都會增大內存使用是否需要來饩稣飧鑫侍饽兀康比恍枰裨蚰慊岱⑾終飧龆鞲久揮茫倚枰蔥械囊恍┐蟮撓τ沒崛夢業?a class=channel_keylink href=http://serverchinaitlabcom/ target=_blank>服務器crzay不堪重負而瘋掉的

  要解決這個問題我們需要來了解一下應用程序域NET Application Domain是NET提供的運行和承載一個活動的進程(Process)的容器它將這個進程運行所需的代碼和數據隔離到一個小的范圍內稱為Application Domain當一個應用程序運行時Application Domains將所有的程序集/組件集加載到當前的應用程序域中並根據需要來調用而對於動態生成的代碼/程序集我們看起來好像並沒有辦法去管理它其實不然我們可以用Application Domain提供的管理程序集的辦法來動態加載和移除Assemblies來達到我們的提高性能的目的具體怎麼做呢在前邊的基礎上增加以下步驟

[]  []  []  []  []  


From:http://tw.wingwit.com/Article/program/net/201311/14507.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.