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

首頁 > 編程 > C# > 正文

C#反射內存的處理分析

2019-10-29 21:48:13
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了C#反射內存的處理,較為詳細的分析了反射加載的內存釋放問題,具有一定的參考借鑒價值,需要的朋友可以參考下
 
 

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

這段時間由于公司的項目的要求,我利用c#的反射的機制做了一個客戶端框架。客戶端里的所有的模塊都是以一定形式進行提供,例如: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
在线亚洲国产精品网| 久99九色视频在线观看| 国产不卡在线观看| 国产日本欧美一区二区三区在线| 欧美激情视频在线免费观看 欧美视频免费一| 久久视频免费观看| 91美女片黄在线观| 欧美大秀在线观看| 久久久久久高潮国产精品视| 日韩有码在线播放| 久久久久久久亚洲精品| 亚洲色图狂野欧美| 成人激情黄色网| 欧美激情在线观看视频| 国产欧美最新羞羞视频在线观看| 97在线日本国产| 欧美日韩另类字幕中文| 亚洲少妇激情视频| 91精品国产电影| 久久久精品国产一区二区| 国产一区二区久久精品| 国产精品极品尤物在线观看| 成人乱色短篇合集| 日韩精品免费在线观看| 亚洲日本欧美日韩高观看| 日韩经典第一页| 国产裸体写真av一区二区| 欧美国产日韩一区| 中文字幕免费精品一区高清| 亚洲免费电影一区| 欧美日韩免费区域视频在线观看| 精品国产乱码久久久久酒店| 亚洲美女黄色片| 欧美老少配视频| 亚洲欧美综合精品久久成人| 久久国产精品亚洲| 成人国产精品久久久久久亚洲| 精品福利免费观看| 在线观看国产精品91| 亚洲大胆美女视频| 亚洲人成在线播放| 日韩高清电影免费观看完整版| 精品国偷自产在线视频| 日韩欧美综合在线视频| 欧美日本精品在线| 国产精品一区二区女厕厕| 亚洲成人久久一区| 日韩视频一区在线| 国产成人综合精品在线| 日韩视频亚洲视频| 日本在线精品视频| 91大神福利视频在线| 日韩av中文字幕在线免费观看| 91在线精品视频| 69av成年福利视频| 国产成人亚洲精品| 国产一区二区在线播放| 国产美女91呻吟求| 在线精品91av| 中文字幕在线日韩| 96sao精品视频在线观看| 亚洲专区中文字幕| 久久久久久国产精品美女| 久久久久久久久久久久久久久久久久av| 美女精品视频一区| 日韩亚洲成人av在线| 亚洲国产成人一区| 久久影院中文字幕| 精品国产视频在线| 国产成人精品日本亚洲| 国产亚洲精品久久久久动| 久久综合国产精品台湾中文娱乐网| 欧美性xxxx在线播放| 热门国产精品亚洲第一区在线| 91精品国产高清自在线看超| 国产拍精品一二三| 国产国语刺激对白av不卡| 亚洲人成电影网| 久久综合色88| 成人欧美一区二区三区在线湿哒哒| 亚洲最新av在线| 尤物yw午夜国产精品视频| 国产69精品久久久久久| 国产日产久久高清欧美一区| 国产精品对白刺激| 国产精品手机播放| 久久天天躁夜夜躁狠狠躁2022| 亚洲天堂网在线观看| 51ⅴ精品国产91久久久久久| 亚洲aaa激情| 欧美国产在线电影| 91精品啪在线观看麻豆免费| 欧美激情在线观看| 国内免费精品永久在线视频| 日韩久久精品成人| 日韩欧美视频一区二区三区| 国产精品亚洲综合天堂夜夜| 欧美视频二区36p| 麻豆国产va免费精品高清在线| 亚洲xxxx做受欧美| 日韩在线免费视频| 日韩一区二区三区国产| 国产精品第二页| 中文字幕日本欧美| 91免费在线视频| 中文在线不卡视频| 久久久久久久激情视频| 福利精品视频在线| 欧美激情二区三区| 91久久国产精品| 日韩av中文字幕在线| 在线精品高清中文字幕| 欧美最顶级丰满的aⅴ艳星| 亚洲午夜未删减在线观看| 日韩精品福利网站| 欧美日韩成人在线播放| 成人欧美在线观看| 国产伦精品免费视频| 欧美在线视频网站| 91在线色戒在线| 一本大道亚洲视频| 91精品国产色综合久久不卡98口| 亚洲大胆人体av| 欧美成人免费一级人片100| 亚洲精品中文字幕av| 欧美激情乱人伦一区| 国产精品日韩在线| 久久免费精品日本久久中文字幕| 亚洲最大福利视频网站| 97国产在线观看| 九九热这里只有精品6| 国产精品成人va在线观看| 国产精品美女无圣光视频| 国产一区二区黄| 亚洲精品97久久| 亚洲黄色av女优在线观看| 日韩视频免费中文字幕| 亚洲xxxx在线| 欧美电影免费观看高清| 亚洲另类激情图| 亚洲精品国产免费| 欧美电影在线观看高清| 国产日韩欧美中文| 欧美成人中文字幕在线| 亚洲综合中文字幕在线观看| 欧美激情视频在线观看| 欧美激情xxxx性bbbb| 午夜精品久久久久久久99热| 欧美精品成人91久久久久久久| 中文字幕不卡在线视频极品| 欧美日韩一区二区三区| 在线国产精品视频| 欧美国产日韩xxxxx| 欧美日韩福利电影| 国内精品久久久久伊人av| 日韩专区在线播放| 亚洲视频精品在线| 成人综合网网址| 日韩成人在线视频网站| 在线不卡国产精品| 久久av.com| 欧美国产日本高清在线| 亚洲a成v人在线观看| 欧美日韩在线观看视频|