亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#反射內存的處理分析

2020-01-24 02:12:58
字體:
來源:轉載
供稿:網友

本文實例分析了C#反射內存的處理。分享給大家供大家參考。具體分析如下:

這段時間由于公司的項目的要求,我利用c#的反射的機制做了一個客戶端框架??蛻舳死锏乃械哪K都是以一定形式進行提供,例如:FORM,UserControl. 在做的過程中很簡單與愉快。具體的過程如下:

1. 收集客戶的需求

2. 整理需求,形成必要的文檔

3. 通過討論大體的得到程序的界面風格

4. 由UI設計師設計出來具體的界面形式

5. 通過需求封裝必要的服務(我們可以使用c#的WCF服務或者JAVA的服務)

6. 制作服務管理框架

7. 封裝程序要使用到的控件

8. 編寫客戶端框架

9. 編寫模塊

10. 加載進行測試

上面說的就是簡單的一個開發的過程,當然里面包括了很多的汗水。一個好的程序都要滿足最基本的可卸載,可插入。即插件式架構。無論是客戶端,還是服務端都要采用插件式管理。

在做c#客戶端框架的時候,利用微軟的反射與工廠模式的機制的時候,里面有個很大的問題。就是通過反射的DLL加載到內存中的時候無法進行內存的釋放,只有你關閉程序的時候才進行內存的釋放,這點有很大的缺陷。我在網上也找了很多的解決的辦法,但是沒有一個能夠成功的。其中最經典的是插件的卸載的方式,這種方式我也進行的實驗,雖然能夠釋放部分內存,但是不能釋放全部的內存。我和很多程序員聊這個事情的時候,他們說把一切能釋放的都釋放掉。但是你就算做到這些也不能做到很好的釋放效果(也許的我的水平不行)。今天來吐槽一下VS的內存的釋放。VS的內存都是通過托管的機制進行資源的使用與釋放,對于非托管資源可以通過析構函數與其他的方式進行釋放。對于反射的情況微軟沒有給一個很好的辦法。如果程序員兄弟們有好的辦法提供給我們學習那將是個大的善果。

我在上面說過通過卸載插件的方式是可以釋放部分的內存,效果也還行,但是對于一些WCF服務寫的控件,在通過遠程的模式確實存在一些問題。具體的部分實現代碼如下:

復制代碼 代碼如下:
internal class AssemblyLoader : MarshalByRefObject, IDisposable
{
#region class-level declarations
private Assembly a = null;
#endregion


#region constructors and destructors
public AssemblyLoader(string fullPath)
{
if (a == null)
{
a = Assembly.LoadFrom(fullPath);
}
}


~AssemblyLoader()
{
dispose(false);
}


public void Dispose()
{
dispose(true);
}


private void dispose(bool disposing)
{
if (disposing)
{
a = null;
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
System.GC.Collect(0);
}
}
#endregion
#region public functionality
public object GetObject(string typename, object[] ctorParms)
{
BindingFlags flags = BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.Public;


object o = null
;
if (a != null)
{
try
{
o = a.CreateInstance(typename, true, flags, null, ctorParms, null, null);
}
catch
{
}
}
return o;
}


public object GetObject(string typename)
{
return GetObject(typename, null);
}
#endregion

 

public class ObjectLoader : IDisposable
{
// essentially creates a parallel-hash pair setup
// one appDomain per loader
protected Hashtable domains = new Hashtable();
// one loader per assembly DLL
protected Hashtable loaders = new Hashtable();


public ObjectLoader()
{}


public object GetObject(string dllName, string typeName, object[] constructorParms)
{
AssemblyLoader al = null;
object o = null;
//Type t = null;
try
{
al = (AssemblyLoader)loaders[dllName];
}
catch (Exception) { }


if (al == null)
{
AppDomainSetup setup = new AppDomainSetup();
setup.ShadowCopyFiles = "true";
AppDomain domain = AppDomain.CreateDomain(dllName, null, setup);
int key=0;
foreach (DictionaryEntry de in domains)
{
if(de.Key.ToString()==dllName)
{
key++;
break;
}
}
if (key == 0)
{
domains.Add(dllName, domain);
}
object[] parms = { dllName };
BindingFlags bindings = BindingFlags.CreateInstance | BindingFlags.Instance | BindingFlags.Public;
try
{
//al = (BCFrameWork.Client.ClientInfrm.AssemblyLoader)domain.CreateInstanceFromAndUnwrap(
// "Loader.dll", "Loader.AssemblyLoader", true, bindings, null, parms, null, null, null);
al = (AssemblyLoader)domain.CreateInstanceFromAndUnwrap(
"BestelLoadDll.dll", "BestelLoadDll.AssemblyLoader", true, bindings, null, parms, null, null, null);
}
catch
{
}
if (al != null)
{
if (!loaders.ContainsKey(dllName))
{
loaders.Add(dllName, al);
}
}
}


if (al != null)
{
o = al.GetObject(typeName, constructorParms);

}
return o;
}


public void Unload(string dllName)
{
if (domains.ContainsKey(dllName))
{
AppDomain domain = (AppDomain)domains[dllName];
AppDomain.Unload(domain);
domains.Remove(dllName);
}
}


~ObjectLoader()
{
dispose(false);
}


public void Dispose()
{
dispose(true);
}


private void dispose(bool disposing)
{
if (disposing)
{
loaders.Clear();
List removeobj = new List();
foreach (object o in domains.Keys)
{
string dllName = o.ToString();
removeobj.Add(dllName);
}
foreach (string item in removeobj)
{
Unload(item);
}
domains.Clear();
System.GC.Collect();
}
}
}

調用方式很簡單,如果你了解反射就知道怎么調用,這個寫法能夠滿足普通的用戶控件的反射遠程加載,但是對于一些特殊的用戶控件還是沒有辦法。

希望本文所述對大家的C#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久成人精品| 亚洲小视频在线| 日韩福利视频在线观看| 9.1国产丝袜在线观看| 国产小视频91| 久久精品最新地址| 国产精品第三页| 91性高湖久久久久久久久_久久99| 亚洲精品一区二区久| 色综合伊人色综合网站| 成人国产精品久久久久久亚洲| 国产+人+亚洲| 欧美极品美女视频网站在线观看免费| 97在线观看视频国产| 欧美第一页在线| 国产亚洲欧美aaaa| 欧美亚洲成人免费| 亚洲福利视频二区| 久久精品中文字幕电影| 久久成人精品一区二区三区| 日韩电视剧在线观看免费网站| 国产精品2018| 中文字幕欧美日韩精品| 精品久久久久久久久久国产| 一区二区日韩精品| 日韩乱码在线视频| 中文字幕在线看视频国产欧美| 国产精品羞羞答答| 亚洲国产天堂久久综合网| 亚洲色图国产精品| 少妇精69xxtheporn| 国产精品永久免费观看| 精品日韩中文字幕| 国产精品视频网址| 久久成人国产精品| 日韩一区二区福利| 国产精品手机播放| 日本久久久久久久久| 久久99国产精品自在自在app| 国产xxx69麻豆国语对白| xvideos国产精品| 亚洲国语精品自产拍在线观看| 亚洲第一精品夜夜躁人人爽| 在线亚洲男人天堂| 欧美成人免费观看| 亚洲精品国产综合久久| 中文字幕国产亚洲| 欧美日韩国产一区中文午夜| 永久免费精品影视网站| 欧美一区二区三区免费视| 精品中文视频在线| 在线播放日韩专区| 久久99久国产精品黄毛片入口| 亚洲色图欧美制服丝袜另类第一页| 中文字幕亚洲天堂| 日韩在线观看免费网站| 亚洲欧美日韩图片| 午夜精品久久久久久久男人的天堂| 亚洲国产成人精品女人久久久| 亚洲精品永久免费精品| 精品爽片免费看久久| 欧美第一淫aaasss性| 欧美极品xxxx| 久久视频这里只有精品| 久久久久久久电影一区| 国产在线拍揄自揄视频不卡99| 国产成一区二区| 成人欧美一区二区三区黑人| 亚洲全黄一级网站| 亚洲免费成人av电影| 久久中文字幕在线视频| 欧美成人精品一区| 亚洲一区二区三区视频| 一本色道久久88综合亚洲精品ⅰ| 亚洲美女精品成人在线视频| 欧美电影免费在线观看| 亚洲天堂免费在线| 国产精品白丝av嫩草影院| 欧美精品在线第一页| 欧美亚洲国产成人精品| 日韩经典中文字幕在线观看| 清纯唯美日韩制服另类| 91精品久久久久久久久不口人| 亚洲一区999| 亚洲人成欧美中文字幕| 中文字幕欧美日韩va免费视频| 国产精品一区二区三区久久| 国产精品视频xxxx| 久国内精品在线| 亚洲精品自产拍| 国产精品美女久久| 日韩二区三区在线| 国产精品偷伦免费视频观看的| 亚洲国产中文字幕久久网| 久久天天躁狠狠躁老女人| 亚洲国产成人精品久久| 伊人男人综合视频网| 亚洲综合自拍一区| 色yeye香蕉凹凸一区二区av| 中文字幕亚洲欧美日韩在线不卡| 黄色一区二区在线| 国产精品av在线播放| 亚洲精品国产综合区久久久久久久| 国产在线观看不卡| 在线视频日本亚洲性| 欧美一级黑人aaaaaaa做受| 日韩电影在线观看免费| 中文字幕视频在线免费欧美日韩综合在线看| 亚洲精品av在线播放| 欧美日韩国产丝袜美女| 一本一道久久a久久精品逆3p| 色视频www在线播放国产成人| 国产精品免费福利| 日韩欧美成人网| 国产成人精品免高潮费视频| 久久中文字幕视频| 欧美大片在线看| 不卡伊人av在线播放| 欧美激情精品久久久久久黑人| 国内精品久久久久影院 日本资源| 九九热视频这里只有精品| 日韩欧美在线网址| 久久精品国产一区二区三区| 精品久久久久久久久国产字幕| 国产欧美日韩亚洲精品| 日韩精品日韩在线观看| 日韩国产欧美精品在线| 久久精品国产视频| 夜夜嗨av色综合久久久综合网| 久久91亚洲人成电影网站| 久久久久久国产精品| 欧美激情xxxx性bbbb| 日韩在线观看成人| 91欧美精品成人综合在线观看| 国产精品第1页| 91在线中文字幕| 国产一区玩具在线观看| 国产z一区二区三区| 久久精品国产99国产精品澳门| 成人性生交大片免费观看嘿嘿视频| 性色av一区二区三区| 2019国产精品自在线拍国产不卡| 在线看片第一页欧美| 欧洲精品久久久| 在线播放精品一区二区三区| 日韩精品中文字幕视频在线| 欧美一级免费看| 亚洲男人天堂网站| 成人免费网站在线| 2019中文字幕在线观看| 久久亚洲一区二区三区四区五区高| 国产精品白丝jk喷水视频一区| 国产精品一区久久久| 自拍偷拍亚洲欧美| 欧美性猛交99久久久久99按摩| 97人洗澡人人免费公开视频碰碰碰| 欧美贵妇videos办公室| 中文字幕在线观看日韩| 国产成人一区二区三区小说| 3344国产精品免费看| 欧美一级淫片aaaaaaa视频| 精品久久久久久久久久ntr影视| 日本在线观看天堂男亚洲| 日韩av在线最新|