锘??xml version="1.0" encoding="utf-8" standalone="yes"?>精品国产乱码久久久久久呢,久久天天日天天操综合伊人av,日韩十八禁一区二区久久http://m.shnenglu.com/flagman/category/15572.html 鍞愪寒鐨勪釜浜烘妧鏈崥瀹? 銆愭榪庤漿杞斤紝浣嗚鏍囨槑鍘熶綔鑰呫?/description>zh-cnMon, 12 Dec 2011 16:19:05 GMTMon, 12 Dec 2011 16:19:05 GMT60C++ library series -- in the MFC multiple-thread environment, how to quit worker-thread safely which begins with AfxBeginThreadhttp://m.shnenglu.com/flagman/archive/2011/12/11/how_to_quit_worker-thread_safely_which_begins_with_AfxBeginThread.htmlflagmanflagmanSun, 11 Dec 2011 12:35:00 GMThttp://m.shnenglu.com/flagman/archive/2011/12/11/how_to_quit_worker-thread_safely_which_begins_with_AfxBeginThread.htmlhttp://m.shnenglu.com/flagman/comments/161934.htmlhttp://m.shnenglu.com/flagman/archive/2011/12/11/how_to_quit_worker-thread_safely_which_begins_with_AfxBeginThread.html#Feedback0http://m.shnenglu.com/flagman/comments/commentRss/161934.htmlhttp://m.shnenglu.com/flagman/services/trackbacks/161934.html
  In the MFC environment, normally, thread should be launched with AfxBeginThread for taking usage of MFC multiple-thread mechanism; In such mechanism, those datastructures, such as AFX_MODULE_STATE, would be used by MFC framework to maintain related thread information. It runs well when threads, launched with AfxBeginThread, quit before the main thread, which is responsible for initializing C run-time, but if such main thread quit before any other thread launched by AfxBeginThread, the current application would crash.
  Such crash comes from the _afxThreadData (CThreadSlotData* _afxThreadData, which is defined in AFXTLS.cpp as global data structure) has been destructed while the main thread quits and it will invoke related function to clean up global data structures, including _afxThreadData definitely.
  Consequently, serious developer should prepare for such case (other worker thread quits before main thread).
  
  The reasonable resolve for such issue, would ensure any other threads should quit before the main thread. 
  
.h file 
  /////////////////////////////////////////////////////////////////////////////
// CSafeEnterLeaveThread thread
class CSafeEnterLeaveThread : public CWinThread
{
DECLARE_DYNCREATE(CSafeEnterLeaveThread)
protected:
CSafeEnterLeaveThread();           // protected constructor used by dynamic creation
// Attributes
public:
// Operations
public:
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSafeEnterLeaveThread)
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
//}}AFX_VIRTUAL
// Implementation
protected:
virtual ~CSafeEnterLeaveThread();
// Generated message map functions
//{{AFX_MSG(CSafeEnterLeaveThread)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
.cpp file 
/////////////////////////////////////////////////////////////////////////////
// CSafeEnterLeaveThread
IMPLEMENT_DYNCREATE(CSafeEnterLeaveThread, CWinThread)
CSafeEnterLeaveThread::CSafeEnterLeaveThread()
{
}
CSafeEnterLeaveThread::~CSafeEnterLeaveThread()
{
}
BOOL CSafeEnterLeaveThread::InitInstance()
{
// TODO:  perform and per-thread initialization here
ASSERT(this->m_hThread);
CMainApp::RegisterMFCThread(this->m_hThread);
return TRUE;
}
int CSafeEnterLeaveThread::ExitInstance()
{
// TODO:  perform any per-thread cleanup here
ASSERT(this->m_hThread);
CMainApp::UnRegisterMFCThread(this->m_hThread);
return CWinThread::ExitInstance();
}
BEGIN_MESSAGE_MAP(CSafeEnterLeaveThread, CWinThread)
//{{AFX_MSG_MAP(CSafeEnterLeaveThread)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
And in the CMainApp,
set<HANDLE> g_ThreadHandleSet;
HANDLE g_ThreadHandleArray[MAXIMUM_WAIT_OBJECTS];
CCriticalSection g_csGlobalData;
void CAccgbApp::CheckAllOtherMFCThreadsLeave()
{
int count = g_ThreadHandleSet.size();
if (count == 0) return;
set<HANDLE>::iterator it;
int idx = 0;
for (it = g_ThreadHandleSet.begin(); it != g_ThreadHandleSet.end() && idx < MAXIMUM_WAIT_OBJECTS; it++, idx++)
{
g_ThreadHandleArray[idx] = *it;
}
if (count > idx) count = idx;
::WaitForMultipleObjects(count, g_ThreadHandleArray, TRUE, INFINITE);
}
void CAccgbApp::CleanupGlobalData()
{
g_csGlobalData.Lock();
g_ThreadHandleSet.empty();
g_csGlobalData.Unlock();
}
BOOL CAccgbApp::RegisterMFCThread(HANDLE hThread)
{
if (hThread == NULL) return FALSE;
g_csGlobalData.Lock();
if (g_ThreadHandleSet.find(hThread) == g_ThreadHandleSet.end()) 
g_ThreadHandleSet.insert(hThread);
g_csGlobalData.Unlock();
return TRUE;
}
void CAccgbApp::UnRegisterMFCThread(HANDLE hThread)
{
if (hThread == NULL) return;
g_csGlobalData.Lock();
if (g_ThreadHandleSet.find(hThread) != g_ThreadHandleSet.end())
g_ThreadHandleSet.erase(hThread);
g_csGlobalData.Unlock();
}


flagman 2011-12-11 20:35 鍙戣〃璇勮
]]>
鎿嶄綔緋葷粺鎬庝箞鏍規(guī)嵁涓涓狧WND鍙ユ焺錛屾壘鍒扮浉搴旂殑浠g爜http://m.shnenglu.com/flagman/archive/2011/04/04/Mapping_BetweenCppObjectAndHWND_InMFC.htmlflagmanflagmanMon, 04 Apr 2011 06:16:00 GMThttp://m.shnenglu.com/flagman/archive/2011/04/04/Mapping_BetweenCppObjectAndHWND_InMFC.htmlhttp://m.shnenglu.com/flagman/comments/143398.htmlhttp://m.shnenglu.com/flagman/archive/2011/04/04/Mapping_BetweenCppObjectAndHWND_InMFC.html#Feedback4http://m.shnenglu.com/flagman/comments/commentRss/143398.htmlhttp://m.shnenglu.com/flagman/services/trackbacks/143398.html銆?鍦?鏌?鐨勫ぇ浣滀腑鎻愬埌: 銆?/em>

: 姣斿鎴戞湁涓涓狢MyButton鐨勭被錛屾垜鐜板湪鏈変粬鐨勪竴涓猦andle
: 緙栬瘧鍣ㄦ庝箞鏍規(guī)嵁榪欎釜鍙ユ焺鎵懼埌CMyButton鐨勪唬鐮佺殑錛?/em>

銆?鍦?鏌愭煇 鐨勫ぇ浣滀腑鎻愬埌: 銆?br>: 榪欎釜鍜孫S/Compiler娌″叧緋伙紝鏄簱璧風(fēng)殑浣滅敤
: 浠ヤ粠鏌愪釜鏂囩珷閲岀湅鐨勶紝璇碝FC鐢ㄤ簡(jiǎn)涓涓ぇmap錛屾病楠岃瘉榪?br>: 鏈夋湰璁睪DI鐨勪功閲岋紝鐢ㄤ簡(jiǎn)WNDCLASS閲岀殑extra bytes鏉ュ疄鐜扮殑榪欎釜鏄犲皠

 


MFC鐨勫簲鐢ㄩ噷錛屾瘡涓狹FC綰跨▼錛堝繀欏昏浣跨敤MFC鏂瑰紡鍚姩鐨勭嚎紼嬶級(jí)閮界淮鎶ゆ湁涓涓狹FC object鍜孒WND涔嬮棿鐨?/p>

mapping錛屾暣涓狹FC妗嗘灦灝辨槸浣跨敤榪欎釜鏈哄埗鏉ュ疄鐜板簲鐢ㄧ駭C++瀵硅薄鍜岀郴緇熺駭鍘熺敓紿楀彛鍐呮牳瀵硅薄涔嬮棿鐨勫叧鑱旓紱

鍥犱負(fù)榪欎釜mapping鏄互綰跨▼涓哄崟浣嶆潵緇存姢鐨勶紝姣忎釜綰跨▼闂翠簰涓嶅叧鑱旓紝鎵浠ワ紝涓涓簲鐢ㄩ噷瀵逛簬娑夊強(qiáng)UI紿楀彛鐨?/p>

浠誨姟鏈濂芥槸閮芥斁鍦ㄥ悓涓涓嚎紼嬮噷闈紝涓鑸氨鏄綋鍓嶈繘紼嬬殑涓葷嚎紼嬶紝鍚﹀垯鍙兘鍑虹幇MFC object鍜孒WND涔嬮棿

鍏寵仈涓嶄笂鐨勯棶棰橈紝鑰屼笖榪欐牱鐨勯棶棰樿繕寰堥殣钄姐?br>

鑷充簬WNDCLASS緇撴瀯鑷甫鐨別xtra bytes鍩燂紝鏄互鍓嶇己涔忓簲鐢ㄦ鏋剁殑鏃朵唬錛屼嬌鐢╓in32 API鐩存帴寮鍙戞椂錛岃姣忎釜

紿楀彛綾伙紙榪欓噷鐨勭被錛屼笉鏄疌++ class鐨勬蹇碉紝鑰屾槸Windows緋葷粺紿楀彛瀹氫箟鏃剁殑涓縐嶆暟鎹粨鏋勶級(jí)閮借兘鏈変釜闄?/p>

甯︿竴浜涢澶栫殑鑷畾涔夋暟鎹殑絀洪棿錛岃繖涓┖闂村線寰琚敤鏉ュ瓨鏀句笌褰撳墠紿楀彛綾葷浉鍏崇殑鐢ㄦ埛鏁版嵁錛岄氬父鏄寚鍚?/p>

鏌愪釜鍐呭瓨鍖哄煙鐨勬寚閽堬紝褰撶▼搴忔搷浣滆繖涓睘浜庤繖涓獥鍙g被鐨勭獥鍙f椂灝卞彲浠ユ牴鎹繖涓檮甯︾殑鑷畾涔夋暟鎹紙鎴?/p>

鑰呮寚閽堬級(jí)鏉ユ搷浣滃搴旂殑鍏寵仈鑷畾涔夋暟鎹紱寰堝鍚庢潵鍑虹幇鐨勬鏋訛紝涔熼兘浣跨敤浜?jiǎn)杩欎釜extra bytes鍩燂紝鏉ュ瓨鏀?/p>

妗嗘灦鏈韓鐨勪竴浜涘拰紿楀彛綾葷浉鍏寵仈鐨勬暟鎹粨鏋勩備粠鐩墠瓚嬪娍鐪嬶紝鐩存帴浣跨敤WNDCLASS浠ュ強(qiáng)extra bytes鐨勫彲鑳?/p>

鎬ф槸寰箮鍏跺井浜?jiǎn)锛屼絾鏄鏋滆鍋氬ソ鍘熺敓搴旂敤鐨勫紑鍙戯紝寰堝搴曞眰鐨勫疄鐜扮粏鑺傛渶瑕佽繕鏄鐭ラ亾涓涓嬶紝浠ヤ究浜?/p>

浼樺寲緇撴瀯鍜屾ц兘錛屼互鍙?qiáng)鍑洪敊鏃剁殑璋冭瘯澶勭悊锛涘洜湄?fù)鏃犺鏄疻inform/WPF錛岃繕鏄法騫沖彴鐨刉TL/QT/WxWindows絳?/p>

絳夋柊鍨嬬殑鏈哄埗鎴栬呮鏋躲佺被搴擄紝鍙鏄湪Windows騫沖彴涓婃惌寤虹殑錛岄偅閮芥槸鍩轟簬鍓嶉潰璇磋繃鐨勮繖濂楁渶鍩烘湰涔熸槸

鏈鏍稿績(jī)鐨刉in32 API鍩虹涔嬩笂銆?/p>

 



flagman 2011-04-04 14:16 鍙戣〃璇勮
]]>
CLR緋誨垪--鎺㈢儲(chǔ)SSCLI銆?銆?/title><link>http://m.shnenglu.com/flagman/archive/2010/12/13/136255.html</link><dc:creator>flagman</dc:creator><author>flagman</author><pubDate>Mon, 13 Dec 2010 01:02:00 GMT</pubDate><guid>http://m.shnenglu.com/flagman/archive/2010/12/13/136255.html</guid><wfw:comment>http://m.shnenglu.com/flagman/comments/136255.html</wfw:comment><comments>http://m.shnenglu.com/flagman/archive/2010/12/13/136255.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/flagman/comments/commentRss/136255.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/flagman/services/trackbacks/136255.html</trackback:ping><description><![CDATA[<p>Fusion is one of the most importants features among ones in the runtime implementation of CLI.</p> <p>In the fusion, or any other components or modules, how to retrieve the execution engine instance and how to generate such engine?</p> <p>UtilExecutionEngine, implemented as COM object, support Queryinterface/AddRef/Release, and exposed via interface IExecutionEngine.</p> <p>With SELF_NO_HOST defined, <br>BYTE g_ExecutionEngineInstance[sizeof(UtilExecutionEngine)];<br>g_ExecutionEngineInstance would be the singleton instance of current execution engine,</p> <p>otherwise, without SELF_NO_HOST, the 'sscoree' dll would be loaded and try to get the exported function, which is named 'IEE' from such dll. Here, it is the well-known shim, in .net CLR, such module is named 'mscoree'. Further, if 'IEE' could not be found in such dll, system would try to locate another exported function, named 'LoadLibraryShim', and use such function to load the 'mscorwks' module, and try to locate the 'IEE' exportd functionin it.</p> <p>It's very obvious that Rotor has implemented its own execution engine, but it also gives or make space for implementation of execution engine from 3rd party. Here, .net CLR is a good candidate definitely, Rotor might load the mscorwks.dll module for its usage.</p> <p>PAL, PALAPI, for example, HeapAlloc, one famous WIN32 API, has been implemented as one PALAPI (defined in Heap.c), to make it possible that the CLI/Rotor be ported smoothly to other OS, such freebsd/mac os.</p> <p>CRT routines are also reimplemented, such as memcpy, it has been implemented as GCSafeMemCpy</p> <p>There're many macros in fuctions, such as SCAN_IGNORE_FAULT/STATIC_CONTRACT_NOTHROW/STATIC_CONTRACT_NOTRIGGER, they are for static analysis tool to scan, analyse and figour out the potential issues in code.</p> <p>From view point of the execution model by CLI, the act of compiling (including JIT) high-level type descriptions would be separated from the act of turning these type descriptions into processor-specific code and memory structures.</p> <p>And such executino model, in other word, the well-known 'managed execution', would defer the loading, verification and compilation of components until runtime really needs; At the same time, the type-loading is the key trigger that causes CLI's tool chain to be engaged at runtime. Deferred compilation(lead to JIT)/linking/loading would get better portability to different target platform and be ready for version change; The whole deferred process would driven by well-defined metadata and policy, and it would be very robust for building a virtual execution environment;</p> <p>At the top of such CLI tool chain, fusion is reponsible for not only finding and binding related assemblies, which are via assembly reference defined in assembly, fusion also takes another important role, loader, and its part of functionality is implemented in PEAssembly, ClassLoader classes. For example, ClassLoader::LoadTypeHandleForTypeKey.</p> <p>For types in virtual execution environment of CLI, rotor defines four kinds of elements for internal conducting, <br>ELEMENT_TYPE_CLASS for ordinary classes and generic instantiations(including value types);<br>ELEMENT_TYPE_ARRAY AND ELEMENT_TYPE_SZARRAY for array types<br>ELEMENT_TYPE_PRT and ELEMENT_TYPE_BYREF for pointer types<br>ELEMENT_TYPE_FNPTR for function pointer types</p> <p>every type would be assigned unique ulong-typed token, and such token would be used to look up in m_TypeDefToMethodTableMap (Linear mapping from TypeDef token to MethodTable *)which is maintained by current module; If there it is, the pointer to method table of such type would be retrieved, or it would look up in the loader module, where the method table should exist in while it's JIT loaded, not launched from NGEN image;</p> <p>And all the unresolved typed would be maintained in a hash table, PendingTypeLoadTable; Types and only those types that are needed, such as dependencies, including parent types, are loaded in runtime, such type is fully loaded and ready for further execution, and other unresolved types would be kept in the previous hash table.</p> <img src ="http://m.shnenglu.com/flagman/aggbug/136255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/flagman/" target="_blank">flagman</a> 2010-12-13 09:02 <a href="http://m.shnenglu.com/flagman/archive/2010/12/13/136255.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>涓轟綍C++涓殑綾繪垚鍛樺嚱鏁版病鏈夐噰鐢ㄧ被浼糐ava涓殑鈥滃叏铏氣濊璁?/title><link>http://m.shnenglu.com/flagman/archive/2010/12/13/WhyNotCPPadoptAllVirtualFuction.html</link><dc:creator>flagman</dc:creator><author>flagman</author><pubDate>Mon, 13 Dec 2010 00:57:00 GMT</pubDate><guid>http://m.shnenglu.com/flagman/archive/2010/12/13/WhyNotCPPadoptAllVirtualFuction.html</guid><wfw:comment>http://m.shnenglu.com/flagman/comments/136254.html</wfw:comment><comments>http://m.shnenglu.com/flagman/archive/2010/12/13/WhyNotCPPadoptAllVirtualFuction.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.shnenglu.com/flagman/comments/commentRss/136254.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/flagman/services/trackbacks/136254.html</trackback:ping><description><![CDATA[<p>鍏充簬紼嬪簭璁捐璇█鏈韓鐨勮璁℃湁璁稿鏈夎叮鐨勮瘽棰橈紝姣斿錛屼負(fù)浣旵++涓殑綾繪垚鍛樺嚱鏁版病鏈夐噰鐢ㄧ被浼糐ava涓殑“鍏ㄨ櫄”璁捐錛?br><br>1) 浠庤璦鏈韓璁捐涓婄湅錛?br>鏁堢巼瀹氱劧鏄痗++褰撳垵璁捐鏃惰冭檻鐨勯噸鐐逛箣涓錛屼婦涓緥瀛愶紝涓轟簡(jiǎn)鑺傜渷涓嶅繀瑕佺殑VTable寮閿錛孉TL鐢╰emplate鎶鏈潤(rùn)鎬佽漿鎹㈡潵妯℃嫙鍔ㄦ佺粦瀹氫互鏀寔COM鐗規(guī)х殑瀹炵幇錛涘拰C鐨勫吋瀹癸紝灝盫Table瑙掑害鐪嬶紝闂涓嶅ぇ錛屽洜涓哄悗鑰呭彲浠ョ敤鍑芥暟鎸囬拡鏁扮粍鏉ユā鎷燂紱</p> <p>2) 鍐嶄粠澶у鏁板簲鐢ㄤ腑甯歌鐨勭被緇ф壙浣撶郴涓婄湅錛?br>闄や簡(jiǎn)鏁翠釜緇ф壙浣撶郴鎵緇熶竴寮鏀懼嚭鏉ョ殑鎺ュ彛闆嗭紙涔熷氨鏄敱铏氬嚱鏁版墍緇勬垚錛夛紝鍦ㄧ戶鎵夸綋緋葷殑姣忎釜灞傞潰鍙﹀浼?xì)鏈夊ぇ閲忕殑鍏朵粬杈呭姪鎴愬憳鍑芥晭图堝叾鏁伴噺閫氬父姣旇櫄鍑芥暟澶氱殑澶氾級(jí)錛岃繖浜涙垚鍛樺嚱鏁板畬鍏ㄦ病蹇呰璁捐鎴愯櫄鍑芥暟錛?/p> <p>3) 浠庡叾浠栬璦鐪嬶紝<br>鍗充嬌杈冩柊鐨勮櫄鎷熸満璇█C#(Java綆楁槸杈冭佺殑铏氭嫙鏈鴻璦),鍙嶈屽畾涔変簡(jiǎn)姣擟++鏇翠負(fù)涓ユ牸鏇翠負(fù)鏄懼紡鐨勬垚鍛樻柟娉曞疄鐜版垨瑕嗙洊鎴栭噸杞芥垨鏂板緩鐨勮鍒欙紱榪欐槸闈炲父閲嶈鐨勫C++浠ュ強(qiáng)Java璁捐鎬濇兂鐨勫弽鎬濄?/p> <p>4) 浠庤璦鐨勯傜敤鍦哄悎鐪嬶紝<br>鎴戜滑鐜板湪鐨勮璁猴紝緇濆ぇ澶氭暟鎯呭喌涓嬪甫鏈変竴涓潪甯擱噸瑕佺殑榛樿鍓嶆彁錛岄偅灝辨槸鍦ㄧ敤鎴鋒佹ā寮忎笅浣跨敤C++錛屽鏋滄斁瀹借繖涓害鏉燂紝鍦ㄥ唴鏍告ā寮忎笅浣跨敤C++錛岄偅鎯呭喌鍙堝畬鍏ㄤ笉鍚屼簡(jiǎn)銆?br>寮曠敤涓嬮潰榪欎釜鏂囨。鐨勮鐐癸紝<a >http://www.microsoft.com/china/whdc/driver/kernel/KMcode.mspx</a><br>棣栧厛錛岀敤鎴鋒佷笅闈炲父寤変環(huán)鍑犱箮涓嶇敤鑰冭檻鐨勮祫婧愶紝鍦ㄥ唴鏍鎬腑鏄潪甯告槀璐電殑錛屾瘮濡傚唴鏍稿爢鏍堜竴鑸氨3涓猵age錛?/p> <p>鍦ㄥ唴鏍鎬笉鑳藉垎欏?paging)鏃跺繀欏諱繚璇佸皢琚墽琛岀殑鎵鏈変唬鐮佸拰鏁版嵁蹇呴』鏈夋晥鐨勯┗鐣欏湪鐗╃悊鍐呭瓨涓紝濡傛灉榪欐椂闇瑕佸椹葷暀鍑犲紶铏氳〃浠ュ強(qiáng)铏氳〃鎸囬拡閭h繕鏄樉寰楅潪甯告槀璐電殑錛屽悓鏃剁紪璇戝櫒涓鴻櫄鍑芥暟錛屾ā鏉跨瓑鐢熸垚浠g爜鐨勬柟寮忥紝璁╁紑鍙戜漢鍛樺緢闅劇‘瀹氳鎵ц涓涓嚱鏁版墍闇瑕佺殑鎵鏈変唬鐮佺殑鎵鍦ㄤ綅緗紝鍥犳涔熸棤娉曠洿鎺ユ帶鍒剁敤浜庡畨緗繖浜涗唬鐮佺殑鑺傦紙涓漢璁や負(fù)鍙兘閫氳繃progma segment/datasegment/codesegment瀵逛簬浠g爜鍜屾暟鎹繘琛岄泦涓帶鍒訛級(jí)錛屽洜姝ゅ湪闇瑕佽繖浜涗唬鐮佹椂錛屽彲鑳藉凡緇忚page out浜?jiǎn)锛?/p> <p>鎵鏈夋秹鍙?qiáng)绫诲眰娆【l撴瀯錛屾ā鏉匡紝寮傚父絳夌瓑榪欐牱鐨勪竴浜涜璦緇撴瀯鍦ㄥ唴鏍告佷腑閮藉彲鑳芥槸涓嶅畨鍏ㄧ殑錛屾渶濂芥槸鎶婄被鐨勪嬌鐢ㄩ檺瀹氫負(fù)POD綾伙紝鍥炲埌鎴戜滑鐨勪富棰樿櫄鍑芥暟錛屼篃灝辨槸璇村唴鏍告佷笅綾昏璁′腑娌℃湁铏氬嚱鏁般?/p> <img src ="http://m.shnenglu.com/flagman/aggbug/136254.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/flagman/" target="_blank">flagman</a> 2010-12-13 08:57 <a href="http://m.shnenglu.com/flagman/archive/2010/12/13/WhyNotCPPadoptAllVirtualFuction.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍏充簬緋葷粺緙撳瓨鐨勯棶棰?鐗╃悊鍐呭瓨娑堣楄繙榪滃浜庡疄闄呭崰鐢ㄧ墿鐞嗗唴瀛?/title><link>http://m.shnenglu.com/flagman/archive/2010/12/11/IssueRelatedWithSystemCache.html</link><dc:creator>flagman</dc:creator><author>flagman</author><pubDate>Sat, 11 Dec 2010 03:19:00 GMT</pubDate><guid>http://m.shnenglu.com/flagman/archive/2010/12/11/IssueRelatedWithSystemCache.html</guid><wfw:comment>http://m.shnenglu.com/flagman/comments/136131.html</wfw:comment><comments>http://m.shnenglu.com/flagman/archive/2010/12/11/IssueRelatedWithSystemCache.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://m.shnenglu.com/flagman/comments/commentRss/136131.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/flagman/services/trackbacks/136131.html</trackback:ping><description><![CDATA[<p><em>銆?鏌愭煇鎻愬埌: 銆?br>: 涓鍙版湇鍔″櫒瑁呮湁windows server 2008 r2錛屽畨瑁?6G鍐呭瓨騫惰緗?6G铏氭嫙鍐呭瓨銆傛渶榪戝湪榪愯涓涓敤C#緙栧啓鐨勫ぇ瑙勬ā璁$畻紼嬪簭鏃跺彂鐜幫紝鏈夊緢澶т竴閮ㄥ垎鐗╃悊鍐呭瓨琚帿鍚嶅叾濡欏湴娑堣椾簡(jiǎn)銆傝祫婧愮洃瑙嗗櫒鏄劇ず璇ョ▼搴忓崰鐢ㄧ墿鐞嗗唴瀛樹笉鍒?G錛屼絾鏄葷殑鐗╃悊鍐呭瓨娑堣楁帴榪?0G錛屽彲鐢ㄧ墿鐞嗗唴瀛樹粎鍓?G銆傞殢鐫榪?<br>: 闄や簡(jiǎn)榪欎釜紼嬪簭涔嬪娌℃湁鍏跺畠紼嬪簭澶ч噺鍗犵敤鍐呭瓨銆傝繖涓▼搴忔湁澶ч噺紓佺洏I(yè)O鎿嶄綔錛屽湪榪愯涓細(xì)涓嶆椂鍦拌皟鐢℅C.Collect()浠ュ強(qiáng)鏃舵竻鐞嗕笉鐢ㄧ殑鍐呭瓨銆傝繖涓疄楠屼腑鐢ㄥ埌鐨勪竴緋誨垪紼嬪簭鐨勭粨鏋勫熀鏈浉鍚岋紝閮戒細(xì)涓嶆椂璋冪敤GC娓呯悊錛屼絾鍏跺畠紼嬪簭鐨勫唴瀛樹嬌鐢ㄩ兘姝e父錛屽彧鏈夎繖涓▼搴忎細(xì)鍑虹幇鍗犵敤鍐呭瓨鏄疄闄呬嬌鐢ㄧ殑<br>: 璇烽棶涓轟粈涔堜細(xì)鍑虹幇榪欐牱鑾悕鍏跺澶氬崰鐢ㄥ唴瀛樼殑鎯呭喌鍛紵璋㈣阿澶у</em><br><br></p> <p>榪欎釜鏃笉鏄簲鐢ㄦ湰韜殑bug錛屼篃涓嶆槸緋葷粺鐨刴emory leak銆?/p> <p>褰撳墠璧勬簮鐩戣鍣ㄤ腑鍏充簬緋葷粺鐗╃悊鍐呭瓨錛屾湁榪欎箞鍑犱釜緇熻欏癸紝鍙敤銆佺紦瀛樸佹繪暟銆佸凡瀹夎錛涘叾涓?緙撳瓨"榪欓」錛屼唬琛ㄧ潃宸茬敤浜庢枃浠剁郴緇熴佺綉緇滅瓑絳夊瓙緋葷粺鐨勬暟鎹紦鍐插瓨鍌ㄧ殑鍐呭瓨瀹歸噺錛屽叾涓寘鍚暟閲忓法澶х殑椹葷暀鍦ㄧ墿鐞嗗唴瀛樹腑鐨勬暟鎹〉闈€傝岃繖鏍風(fēng)殑鐗╃悊鍐呭瓨娑堣楀茍娌℃湁褰掑叆浠諱綍涓涓繘紼嬪垪琛ㄦ樉紺虹殑榪涚▼鎵鍗犵敤鐨勭墿鐞嗗唴瀛樸傝繖灝辨槸涓轟粈涔堜笅闈㈠叕寮忥紝</p> <p>榪涚▼鍒楄〃鏄劇ず鐨勬墍鏈夎繘紼嬫墍鍗犵敤鐨勭墿鐞嗗唴瀛樹箣鍜?+ 鍙敤鐗╃悊鍐呭瓨 < 鐗╃悊鍐呭瓨鎬繪暟</p> <p>錛屾垚绔嬬殑鍘熷洜鎵鍦ㄣ?/p> <p>瀵艱嚧榪欎竴鐜拌薄鐨勫師鍥狅紝浠庤繖涓ぇ瑙勬ā璁$畻紼嬪簭鐨勮涓烘弿榪扮湅錛屽熀鏈彲浠ユ柇瀹氭槸鐢變簬浠ヤ笅涓ょ偣錛?br>1錛夊簲鐢ㄦ湰韜殑澶ц妯℃暟鎹┗鐣欑墿鐞嗗唴瀛橈紝瀵艱嚧parser.exe榪涚▼搴炲ぇ鐨剋orking set錛?br>2錛夊ぇ閲忛綣佺殑IO鎿嶄綔錛屽紩璧峰ぇ閲忕殑鐗╃悊鍐呭瓨涓虹郴緇熺紦瀛樻墍鍗犵敤錛?/p> <p>瀵逛簬1),蹇呴』娉ㄦ剰錛孏C.Collect()鍙槸璁劇疆浣胯兘鍨冨溇鏀墮泦鐨勬爣蹇椾綅錛屽茍娌℃湁绔嬪嵆鍚姩鍨冨溇鏀墮泦榪囩▼錛岃繖涓繃紼嬬殑瀹為檯鍚姩鏃跺埢鐢盋LR鏉ュ姩鎬佸喅璁紱</p> <p>鎵浠ュ鏋滆鑾峰緱鍗蟲椂鐨勬墭綆″唴瀛樼殑閲婃斁錛屽茍榪涗竴姝ラ噴鏀劇墿鐞嗗唴瀛樹互鍑忓皬褰撳墠榪涚▼鐨剋orking set錛屽彲浠ヤ嬌鐢ˋppDomain榪欎釜.net涓嬪彲浠ョ敤鏉ヨ祫婧愬垝鍒嗐佽幏鍙栧拰閲婃斁鐨勶紝鍦ㄦ蹇典笂榪戜技浜庤交閲忕駭榪涚▼鐨勭紪紼嬭涔夛紱鍦ˋppDomain涓幏鍙栫殑鍚勭璧勬簮錛屽寘鎷墭綆″唴瀛樸佸姞杞藉叾涓殑鍚勪釜assembly浠ュ強(qiáng)CCW絳夛紝鍦ㄦAppDomain琚噴鏀炬椂閮借鐩稿簲鐨勫強(qiáng)鏃墮噴鏀撅紙鎴栬呭紩鐢ㄨ鏁伴掑噺錛夈?/p> <p>瀵逛簬2錛夛紝閲嶆柊瑙傚療鍏堝墠鐨勮璁″疄鐜板拰妯″瀷錛岃冭檻鏄惁鑳芥妸涓浜涘垎鏁g殑IO鎿嶄綔鍚堝茍璧鋒潵榪涜錛屾瘮濡?<br>for(long i=0; i < Count; ++i)<br>{<br>  ...<br>  objIO.Operation(Data[i], 1);<br>  ...<br>}<br>淇敼涓?br>for(long i=0; i < Count; ++i)<br>{<br>  ...<br>  ...<br>}<br>objIO.Operation(Data, Count);<br>榪欐牱瀵逛簬鎻愰珮搴旂敤鐨処O鏁堢巼浠ュ強(qiáng)鎻愬崌緋葷粺緙撳瓨鍒╃敤鐜囧簲褰撲細(xì)鏈夊府鍔┿?/p> <p><br>瀵逛簬2錛夛紝緋葷粺緙撳瓨闅忕潃榪欎釜澶ц妯¤綆楀簲鐢ㄧ殑榪涜鑰岄愭澧炲ぇ錛屽茍鏈鍚庡鑷存暣涓郴緇熸棤娉曡幏鍙栫殑鐗╃悊鍐呭瓨鑰屾棤娉曠戶緇繍琛岀殑鐜拌薄錛屼及璁″嵆浣塊噰鐢ㄤ簡(jiǎn)鍦ㄤ笂鏂囨彁鍑虹殑錛屽湪搴旂敤紼嬪簭浠g爜涓敖鍙兘鍚堝茍IO鎿嶄綔錛屽噺灝慖O嬈℃暟鐨勬柟娉曪紝涔熶笉浼?xì)鏀瑰杽绯痪l熺紦瀛樺崰鐢ㄧ墿鐞嗗唴瀛樻暟閲忚繃澶х殑闂銆傝繖涓棶棰樻湰璐ㄤ笂鏄疻indows鎿嶄綔緋葷粺鏈韓浠嶯T鏃朵唬鍒扮幇鍦紝涓鐩村瓨鍦ㄧ殑闂錛屼富瑕佹槸鍥寸粫鐫Windows kernel涓殑Cache mananger浠ュ強(qiáng)memory manager鏍稿績(jī)鎬佺粍浠剁殑瀹炵幇鏈哄埗鑰屼駭鐢熺殑銆?/p> <p>鏍規(guī)嵁鐩墠鐨凜c(瀵笴ache manager鐨勭畝縐幫紝鍦╓indowsResourceKernel寮婧愰」鐩腑錛孋ache manager鐩稿叧妯″潡鐨勫嚱鏁伴兘浠c浣滀負(fù)鍓嶇紑錛屾瘮濡侰cCopyRead錛孋cFlushCache絳夛紝Memory manager涔熷悓鏍風(fēng)畝縐癕m)鐨勫疄鐜版満鍒訛紝鎵鏈夊鏂囦歡緋葷粺鐨勮闂紝鍖呮嫭鏈湴鍜岀綉緇滐紝閮戒細(xì)棣栧厛鐢盋c瀵圭浉鍏抽〉闈綔緙撳瓨鏄犲皠錛岄殢鐫棰戠箒鐨処O鐨勬搷浣滐紝琚獵c緙撳瓨鐨勯〉闈篃榪呴熼掑錛岃岃緙撳瓨欏甸潰鍗犵敤澶氬皯鐗╃悊鍐呭瓨錛岃繖鏄敱Windows kernel涓殑Memory manager鍐沖畾銆傜洰鍓嶅湪64浣嶅鉤鍙頒笂錛岀郴緇熺紦瀛樻渶楂樺彲杈?TB錛屾墍浠ヨ繖涓簲鐢ㄨ繘紼嬬殑榪愯涓嚭鐜板垎閰?G鐨勭紦瀛樻槸瀹屽叏鍙兘鐨勶紝浣嗗悓鏃墮棶棰樹篃闅忎箣鑰屾潵錛岄偅灝辨槸緋葷粺緙撳瓨鍗犵敤浜?jiǎn)杩囧鐨勭墿鐞嗗唴瀛樺Q屽鑷村叾浠栬繘紼嬩互鍙?qiáng)鍐呮牳鏈w棤娉曠敵璇瘋凍澶熺殑鐗╃悊鍐呭瓨錛屾渶鍚庤嚧浣跨郴緇?#8220;鍍墊”錛?/p> <p>瀵逛簬榪欎釜闂錛屽井杞彁渚涗簡(jiǎn)“Microsoft Windows Dynamic Cache Service”宸ュ叿鏉ユ彁渚涘緋葷粺緙撳瓨鐨勫伐浣滈泦working set瀹歸噺錛堜篃灝辨槸椹葷暀鐗╃悊鍐呭瓨鐨勫ぇ灝忥級(jí)鐨勬帶鍒訛紝榪欎釜宸ュ叿涓昏鏄SetSystemFileCacheSize鐨勫皝瑁咃紝鍙互璁劇疆緋葷粺緙撳瓨瀹歸噺鐨勪笂涓嬮檺銆?/p> <p>浣嗚繖鍙槸涓縐嶄復(fù)鏃剁殑瑙e喅鏂規(guī)錛屽洜涓哄簲鐢ㄨ櫧鐒跺彲浠ラ氳繃涓婇潰榪欎釜Dynamic Cache Service鏉ヨ緗拰闄愬埗緋葷粺緙撳瓨瀹歸噺鐨勫ぇ灝忥紝浣嗘槸濡備綍紜畾緙撳瓨瀹歸噺澶у皬鐨勯潪甯稿洶闅撅紝濡傛灉榪囧皬錛屾墍鏈塈O鎬ц兘澶у彈褰卞搷錛屾暣涓狢c濡傚悓铏氳錛涘鏋滆繃澶?絳変環(huán)浜庝笉鍙楅檺)錛岄偅涔堢郴緇熺紦瀛樺崰鐢ㄨ繃澶氱墿鐞嗗唴瀛樺鑷寸郴緇熷兊姝葷殑鐜拌薄灝變細(xì)閲嶇幇銆?/p> <p>鎵浠ヤ粠鏍規(guī)湰涓婄湅錛岃繖涓棶棰樺簲鐢卞寘鎷珻c鍜孧m鍦ㄥ唴鐨勬暣涓猈indows kernel浣滃嚭瀹屾暣涓鑷寸殑璋冩暣錛屼絾浠庣洰鍓嶇殑瀹炵幇鐪嬭瀹屾垚鏁翠釜鏂規(guī)鏀瑰姩寰堝ぇ錛屾嵁縐拌繖涓敼榪涘彲鑳戒細(xì)鑰冭檻鍖呭惈鍦╓in7涓彂甯冦?/p> <p>Microsoft Windows Dynamic Cache Service涓嬭澆,<br><a >http://www.microsoft.com/downloads/en/details.aspx?FamilyID=e24ade0a-5efe-43c8-b9c3-5d0ecb2f39af&displaylang=en</a></p> <p>Microsoft Windows Dynamic Cache Service鐩稿叧鐨勪粙緇嶏紝<br><a >http://blogs.msdn.com/b/ntdebugging/archive/2009/02/06/microsoft-windows-dynamic-cache-service.aspx</a></p> <img src ="http://m.shnenglu.com/flagman/aggbug/136131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/flagman/" target="_blank">flagman</a> 2010-12-11 11:19 <a href="http://m.shnenglu.com/flagman/archive/2010/12/11/IssueRelatedWithSystemCache.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鎬濊冪郴緇烝PI璁捐鐨勯棶棰?/title><link>http://m.shnenglu.com/flagman/archive/2010/12/01/Thinking_Of_API_Design.html</link><dc:creator>flagman</dc:creator><author>flagman</author><pubDate>Wed, 01 Dec 2010 13:28:00 GMT</pubDate><guid>http://m.shnenglu.com/flagman/archive/2010/12/01/Thinking_Of_API_Design.html</guid><wfw:comment>http://m.shnenglu.com/flagman/comments/135191.html</wfw:comment><comments>http://m.shnenglu.com/flagman/archive/2010/12/01/Thinking_Of_API_Design.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/flagman/comments/commentRss/135191.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/flagman/services/trackbacks/135191.html</trackback:ping><description><![CDATA[<p>鏈榪戞濂藉湪鎬濊冪郴緇烝PI璁捐涓冮噺鐨勪竴浜涢棶棰橈紝<br><br>銆愭煇緗戝弸璁ㄨ鍒般?br><em>: 閭e湴鍧鏄笉鏄悓涓涓湴鍧鍛€傛垜鐜板湪鐨勭悊瑙f槸榪欐牱鐨勶紝鍋囪鏈夊法澶х殑鐪熷疄鍐呭瓨銆倃indows棣栧厛灝嗛珮2G鐨勫唴瀛樿嚜宸卞崰浜?jiǎn)锛岀敤浣滃悇绉嶅唴鏍稿璞°傝繖2G鍐呭瓨鍏變韓緇欐瘡涓繘紼嬶紝浣嗚繘紼嬩笉鑳界洿鎺ヨ闂紝鍙兘閫氳繃windows緇欏畾鐨勫嚱鏁拌闂?br>: 鐒跺悗姣忎釜榪涚▼閮界粰浠?G鍐呭瓨錛岃繘紼嬪鏋滃垱寤鴻嚜宸辯殑瀵硅薄灝辨斁鍒拌嚜宸遍偅2G鍐呭瓨閲岄潰錛屽鏋滆寤虹珛鍐呮牳瀵硅薄灝辨斁鍒板叡浜殑閭i珮2G閲岄潰鍘匯?br>: 鎵浠ヤ笉鍚岃繘紼嬪鏋滃彲浠ヨ闂珮2G鍐呭瓨鐨勮瘽錛屼換浣曡繘紼嬭闂埌鍚屼竴涓珮鍦板潃瀹為檯涓婇兘鏄闂埌鍚屼竴涓璞°備絾濡傛灉璁塊棶浣?G鍦板潃鐨勮瘽錛屼笉鍚岃繘紼嬫槸瀵瑰簲涓嶅悓鐨勫璞$殑銆?br></em><br><br><br>鍦ㄤ笉鍚岀殑榪涚▼涓紝璇㈤棶鍚屼竴涓唴鏍稿璞$殑瀹為檯鍦板潃錛堟棤璁烘槸綰挎у湴鍧榪樻槸鐗╃悊鍦板潃錛夛紝鏄棤鎰忎箟鐨勶細(xì)</p> <p>棣栧厛錛屽唴鏍稿璞″彧鑳界敱鍦ㄥ唴鏍告佷笅鐨勪緥紼嬫墠鑳界洿鎺ヨ闂紝鍦ㄦ垜浠棩甯哥殑浠g爜涓紝鎵璋冪敤鐨刉indows API錛屾瘮濡侰reateFile, 錛堟敞鎰忚皟鐢ㄥ垰寮濮嬫椂鏄浜庣敤鎴鋒佷笅鐨勶級(jí)錛屼竴鑸兘浼?xì)鍦╪tdll.dll涓壘鍒板搴旂殑鍐呮牳鍑芥暟鎴栦緥紼嬶紝鎺ョ潃緋葷粺鍒囨崲鍒板唴鏍告侊紝寮濮嬭皟鐢ㄥ疄闄呭搴旂殑鍐呮牳鍑芥暟(KiCreateFile)錛岃繖涓椂鍊欐墠浼?xì)鍘昏畨K棶鍐呮牳瀵硅薄鐨勫疄闄呭湴鍧錛岀劧鍚庡緩绔嬩竴涓鍐呮牳瀵硅薄瀵瑰簲褰撳墠榪涚▼鐨凥andle錛屽茍鎶婂畠榪斿洖緇檆aller錛屽悓鏃跺垏鎹㈠洖鐢ㄦ埛鎬侊紱鍥犳錛屽浜庣敤鎴鋒佺▼搴忔潵璇達(dá)紝鍙涓斿彧鑳界煡閬撹鍐呮牳瀵硅薄鍦ㄥ綋鍓嶈繘紼嬩腑鐨勫搴旂殑Handle灝卞彲浠ュ鍏惰繘琛屾搷浣滀簡(jiǎn)錛?/p> <p>鍏舵錛岃繖鏍風(fēng)殑璁捐鏄嚭浜庡OS鏍稿績(jī)鏁版嵁緇撴瀯錛堝綋鐒跺寘鎷垜浠鍦ㄨ璁虹殑鍐呮牳瀵硅薄錛夌殑淇濇姢錛涘鏋滅敤鎴鋒佺▼搴忓彲浠ヨ交鏄撶殑鑾峰彇鍐呮牳鏁版嵁緇撴瀯鐨勫疄闄呭湴鍧錛岄偅涔堝浜庢暣涓狾S鐨勫畨鍏ㄥ拰紼沖畾鏄劇劧鏋勬垚寰堝ぇ鐨勯棶棰橈紱涓涓敤鎴鋒佺殑璇搷浣滃彲浠ヨ交鏄撶殑寮曡搗鏁翠釜OS鐨勫穿婧冿紝鑰屾湁浜?jiǎn)杩欎竴灞傜殑淇濇姢錛屽穿婧冪殑鍙槸褰撳墠榪涚▼鑰屼笉鏄暣涓郴緇燂紱</p> <p>鎺ョ潃涓婇潰榪欑偣錛屼篃鍙互鐪嬪嚭錛屽唴鏍稿璞$殑濡傛璁捐杈懼埌浜?jiǎn)鎺ゾU砄S鏈韓鐨勫鉤婊戞紨榪涚殑鐩殑銆備粠Windows 3.0鍒?5/98錛屼粠NT鍒癢in2k/XP錛屽啀鍒扮溂涓嬬殑Vista/Win7錛學(xué)indows鎿嶄綔緋葷粺鏈韓鍙戠敓浜?jiǎn)宸ㄥぇ鐨勫彉鍖栧拰杩涙锛岄噰绾充簡(jiǎn)鏃犳暟鐨勬柊鎶鏈柊鏂規(guī)硶錛屼絾鏄畠鍩烘湰鐨勭郴緇熷簲鐢ㄧ紪紼嬫帴鍙o紝涔熷氨鏄垜浠墍鐔熺煡鐨剋indows API錛屽嵈騫舵病鏈夊彂鐢熷お澶х殑鏀瑰彉錛屽緢澶歐in 3.0 榪欎釜16浣峅S鏃朵唬鐨勭▼搴忎唬鐮佸彧瑕佸綋鍒濊璁¤鑼冪紪鐮佽鑼冿紝紼嶈淇敼灝卞彲浠ュ湪鏈鏂扮増鐨凮S涓婅繍琛屽椋烇紱鏄粈涔堝仛鍒頒簡(jiǎn)榪欎簺錛熶篃灝辨槸鎵璋撶殑鏋佷負(fù)閲嶈鐨勫悜鍚庡吋瀹規(guī)э紝鎴戜釜浜鴻涓猴紝鎶婃搷浣滅郴緇熺殑閲嶈/涓昏鍔熻兘鎶借薄鎴愬唴鏍稿璞★紝騫墮氳繃涓濂楁瀬涓簊olid鐨凙PI鏆撮湶鍑烘潵錛岃揪鎴愪簡(jiǎn)榪欎釜鐩爣銆?/p> <p>榪欐槸涓縐嶆洿楂樺眰嬈′笂鐨勯潰鍚戝璞★紝鎶婂疄鐜扮殑緇嗚妭錛屾妸緋葷粺鐨勫鏉傦紝綆鍗曡屼紭闆呯殑灝佽浜?jiǎn)钃v鏉ャ備綘鍙璋冪敤CreateFile鍘誨緩涓枃浠舵垨綆¢亾鎴栭偖妲斤紝涓嶇敤鎷呭績(jī)褰撳墠OS鏄疻indows 3.0榪樻槸Win7錛岃幏寰楃殑Handle錛屼綘涔熶笉鐢ㄥ幓鍏沖績(jī)瀹冧互鍙?qiáng)瀹冩墍鎸囧悜鐨勫唴鏍稿璞℃槸Windows 3.0鐨勫疄鐜拌繕鏄疻in7鐨勫疄鐜般?/p> <p>Windows涓婃墍鏈夌殑綺懼僵鍑犱箮閮芥槸鍩轟簬榪欏閫氳繃鍐呮牳瀵硅薄姒傚康鎶借薄騫舵毚闇茬殑API鍩虹涔嬩笂錛孋OM/OLE錛岃繖涓簩鍗佸勾鍓嶉渿鎾兼х殑ABI鍜孖PC鑼冪暣鐨勬妧鏈鑼冿紝鍏朵腑寰堝鐨勮璁℃濊礬涔熸槸妞嶆牴浜庡唴鏍稿璞$殑璁捐鐞嗗康錛屽COM瀵硅薄鐨勫紩鐢ㄨ鏁板拰鍐呮牳瀵硅薄寮曠敤璁℃暟錛孖Unknown鍜學(xué)indows Handle(鍓嶈呮槸鎸囧悜鏌愪釜浜岃繘鍒跺吋瀹圭殑緇勪歡瀵硅薄錛屽悗鑰呭紩鐢ㄦ垨闂存帴鎸囧悜鏌愪釜鍐呮牳瀵硅薄錛岄兘鏄浜庢煇涓鏉傛蹇電殑涓鑷存ф娊璞¤〃榪?錛岀瓑絳夛紱</p> <p>鍗佸勾鍓嶇殑.net錛屾湰鏉ユ槸浣滀負(fù)COM鐨勫崌綰х増鏈帹鍑猴紝鎶奀OM/OLE鐨勫疄鐜板鏉傛у皝瑁呭湪浜?jiǎn)铏氭嫙鏈候q沖彴CLR閲岄潰錛岃屼粠榪欎釜铏氭嫙鏈虹殑寮婧愬疄鐜癝SCLI錛屾垜浠彲浠ョ湅鍒板ぇ閲忕殑COM鏈哄埗鍦?net鐨勫叿浣撳疄鐜伴噷闈㈣搗浜?jiǎn)鋴D瓚寵交閲嶇殑浣滅敤銆傚湪榪欎簺VM涓ぇ閲弒ymbol鏈夌潃COR鐨勫墠緙鎴栬呭悗緙錛孋OR鎸囦唬浠涔堬紵Common Object Runtime, 鍘熸潵CLR/SSCLI鐨勮璁℃濊礬涔熸槸鎶奜S閫氳繃铏氭嫙鏈篤M鐨勫艦寮忥紝騫墮氳繃common object鍚戝簲鐢ㄧ▼搴忔毚闇插姛鑳姐?/p> <p>灝忕粨涓涓嬶紝<br>OS鍐呮牳瀵硅薄API錛屼笁鍗佸勾鍓嶇郴緇熺駭鍒殑瀵硅薄鎶借薄錛?br>COM/OLE錛屼簩鍗佸勾鍓嶄簩榪涘埗緇勪歡綰у埆鐨勫璞℃娊璞★紱<br>.net/CLR, 鍗佸勾鍓嶈櫄鎷熸満騫沖彴綰у埆鐨勫璞℃娊璞★紱</p> <p>鍐欏埌榪欓噷鍊掓槸寮曡搗浜?jiǎn)鎴戝叾浠栫殑涓浜涙濊冿紝杞歡宸ヤ笟鐣屼竴鐩翠互鏉ュ闈㈠悜瀵硅薄OO鏄儹鐏湞澶╋紝鐗瑰埆鏄璦灞傞潰錛屼粠C++/Java/C#鍒癙ython/JScript錛屼笉涓鑰岃凍錛?/p> <p>浣嗘槸鎴戜滑鏈夋病鏈変粠鏍規(guī)湰鎬х殑璁捐鐞嗗康涓婂闈㈠悜瀵硅薄錛屽療綰抽泤璦浜?jiǎn)鍛㈠Q?/p> <p>濡傛灉鐜板湪璁捐Windows榪欏API鐨勪換鍔℃斁鍦ㄥぇ瀹墮潰鍓嶏紝浼?xì)閲囩敤鍐呮牳瀵硅?Handle鏂規(guī)榪樻槸鐩存帴鎸囧悜OS鍐呴儴鏁版嵁緇撴瀯鐨勬柟寮忔潵鏆撮湶鍔熻兘錛?/p> <p>浠庝笁鍗佸勾鍓嶇殑榪欏API鐨勮璁′腑錛屾垜浠湡鐨勫彲浠ュ鍒板緢澶氥?/p> <p><br> </p> <img src ="http://m.shnenglu.com/flagman/aggbug/135191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/flagman/" target="_blank">flagman</a> 2010-12-01 21:28 <a href="http://m.shnenglu.com/flagman/archive/2010/12/01/Thinking_Of_API_Design.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>感谢您访问我们的网站,您可能还对以下资源感兴趣:</p> <a href="http://m.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.zhxjk.cn" target="_blank">久久午夜福利无码1000合集</a>| <a href="http://www.xiquwang.com.cn" target="_blank">色综合久久久久综合体桃花网 </a>| <a href="http://www.raythai.com.cn" target="_blank">久久久久综合国产欧美一区二区</a>| <a href="http://www.uqknet.cn" target="_blank">久久精品国产影库免费看</a>| <a href="http://www.zixunlawyer.com.cn" target="_blank">99久久精品免费观看国产</a>| <a href="http://www.enikl.cn" target="_blank">婷婷久久五月天</a>| <a href="http://www.nyvgcd.cn" target="_blank">国产成人精品久久二区二区</a>| <a href="http://www.ter2.cn" target="_blank">久久无码人妻精品一区二区三区 </a>| <a href="http://www.888wx.cn" target="_blank">欧美久久综合九色综合</a>| <a href="http://www.91baokao.cn" target="_blank">亚洲欧美日韩久久精品第一区</a>| <a href="http://www.quheitou.net.cn" target="_blank">久久国产精品成人免费</a>| <a href="http://www.vtkh.cn" target="_blank">久久综合偷偷噜噜噜色</a>| <a href="http://www.bailidujuan.cn" target="_blank">精品久久久久久中文字幕</a>| <a href="http://www.cnhtyy.cn" target="_blank">日本久久久久久久久久</a>| <a href="http://www.52liansuo.com.cn" target="_blank">精品国产乱码久久久久久郑州公司 </a>| <a href="http://www.k8uvo.cn" target="_blank">国产农村妇女毛片精品久久</a>| <a href="http://www.likyh.cn" target="_blank">国产A三级久久精品</a>| <a href="http://www.agilespring.cn" target="_blank">91精品婷婷国产综合久久</a>| <a href="http://www.riseguide.com.cn" target="_blank">久久久无码精品亚洲日韩蜜臀浪潮 </a>| <a href="http://www.hbxstech.cn" target="_blank">国产高清国内精品福利99久久</a>| <a href="http://www.uugp.cn" target="_blank">久久精品国产99久久久古代</a>| <a href="http://www.xuzhou86.cn" target="_blank">草草久久久无码国产专区</a>| <a href="http://www.mcyoyo.cn" target="_blank">亚洲中文字幕无码一久久区</a>| <a href="http://www.uyns.cn" target="_blank">久久国产影院</a>| <a href="http://www.jhitezpt.cn" target="_blank">国产一区二区精品久久</a>| <a href="http://www.dobv.cn" target="_blank">A级毛片无码久久精品免费</a>| <a href="http://www.yghzby.cn" target="_blank">国产一区二区三精品久久久无广告</a>| <a href="http://www.3743.com.cn" target="_blank">亚洲AV日韩精品久久久久久久</a>| <a href="http://www.gdchengye.com.cn" target="_blank">狠狠久久综合</a>| <a href="http://www.aygdxx.cn" target="_blank">久久精品www人人爽人人</a>| <a href="http://www.todd3015.cn" target="_blank">亚洲国产天堂久久综合</a>| <a href="http://www.alibabataba.cn" target="_blank">一级做a爰片久久毛片16</a>| <a href="http://www.xn88.cn" target="_blank">久久综合香蕉国产蜜臀AV</a>| <a href="http://www.z718.cn" target="_blank">亚洲天堂久久久</a>| <a href="http://www.rezhei.cn" target="_blank">久久久久久亚洲精品不卡</a>| <a href="http://www.shangxin.net.cn" target="_blank">国产成人精品久久一区二区三区</a>| <a href="http://www.hoqw.cn" target="_blank">97久久国产综合精品女不卡</a>| <a href="http://www.p146.cn" target="_blank">婷婷久久综合九色综合绿巨人</a>| <a href="http://www.hunxueer.cn" target="_blank">亚洲午夜精品久久久久久人妖</a>| <a href="http://www.jianluanwang.cn" target="_blank">国内精品久久久久影院优 </a>| <a href="http://www.haolook.cn" target="_blank">97久久精品无码一区二区天美</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>