GC:collect the isolated object in the shared heap.
machinism:
1.When we create an new object in the shared heap, if the memory size of the shared heap can't fit the new object, CLR will invoke the GC.
2.GC will wait until all the .NET apps in the same computer pends.
3.GC creates a list of all the referenced objects in the shared heap.
In addition, GC will add all the object with destructor to the list.
GC will create a new array named FReachable, and add all those objects with destructor to this array.
4.GC moves all the referenced objects to the bottom of the shared heap.
5.GC updates all the referenced objects's pointer.
6.CLR will execute all the destructor of the objects in the FReachable. After exected, CLR will reset the destructer's flag.
when will the GC execute the destructor?
1.Destructor
2.Dispose(reset destructor's flag)
using -> invoke Dispose() method.
Assembly deployment:
How does CLR load an assembly?
CLR(Class loader)
1. CLR looks for a config file(app.exe.config).
2. CLR will look for the assembly from the path that the app config file defines. -> internet(http://www.founder.com/a.dll), private path(bin;app\bin;app\dll)
3. If not find, CLR will look for the GAC(Global Assembly Cache).
4. If not find, CLR will look for the executing folder.
CLR(Exception Manager)
TestDep, Version=1.0.1925.15891, Culture=neutral, PublicKeyToken
1. AssemblyName
2. Version Number
3. Culture Information
4. PublicKeyToken
Deployment path:
1. Execution folder
2. Config folder
1)Internet config: <codeBase>
2)private path: <probing>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="bin;bin2\subbin;bin3"/>
</assemblyBinding>
</runtime>
</configuration>
3. GAC:
precondition:
1)strong name: CLSID/PrgID
a pair asyncArithmatic key.
TestDep, Version=1.0.1925.15891, Culture=neutral, PublicKeyToken
sn.exe
2)version number
gacutil.exe
1. verion control:
verion redirect. <bindingRedirect>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="v1.1\Debug"/>
<dependentAssembly>
<assemblyIdentity name="TestDep" publicKeyToken="5ad115fe5d425e50"/>
<bindingRedirect oldVersion="1.0.0.0"
newVersion="1.1.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
native images: NGen.exe
2. install package:
installshield
.NET Framework redistributed
Custom action in the process of installation!
zh-cn
Assembly reflection:
1) read resouce file from assembly.
2) get types from assembly.
3) create object dynamic from the assembly.
.NET Event:
Delegate -> a anoymouse function pointer
int/double... -> System.Int32/Double
delegate -> Delegate
overload operator +
Data Type -> .NET Framework struct/class
Common Type System: CTS
1)value type: stack
value copy.
structure
2)reference type: shared heap
pointer copy.
Change Data Type:
1)implicity convertion: int16 -> int32 -> int64
short -> long
2)
long -> short
3)different type convertion:
any type -> string: ToString()
string -> other type: Parse()
anytype <-> object: boxing/unboxing
4)System.Convert class
lab:
1. create install package, add custom action. record the username and company information in a file during the installation process.
2. create a reflection application, can be runned as a unit tester.
3. create a component with an event.