Csharp/CSharp Tutorial/Development/Environment

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Accessing Environment Settings:

<source lang="csharp">using System; class MainClass {

   public static void Main()
   {
       Console.WriteLine("Command Line: {0}", Environment.rumandLine);
       Console.WriteLine("Current Directory: {0}", Environment.CurrentDirectory);
       Console.WriteLine("Machine Name: {0}", Environment.MachineName);
       Console.WriteLine("Stack Trace: {0}", Environment.StackTrace);
       Console.WriteLine("System Directory: {0}", Environment.SystemDirectory);
       Console.WriteLine("Tick Count: {0}", Environment.TickCount);
       Console.WriteLine("Version: {0}", Environment.Version);
       Console.WriteLine("Working Set: {0}", Environment.WorkingSet);
       
   }

}</source>

Command Line: main
Current Directory: C:\Java_Dev\WEB\dev\CSharp
Machine Name: nfex
Stack Trace:    at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
   at System.Environment.get_StackTrace()
   at MainClass.Main()
System Directory: C:\WINDOWS\system32
Tick Count: 753202203
Version: 2.0.50727.42
Working Set: 6426624

Accessing Environment Settings: Environment.CurrentDirectory and SystemDirectory

<source lang="csharp">using System; class MainClass {

   public static void Main()
   {
       Console.WriteLine("Current Directory: {0}", Environment.CurrentDirectory);
       Console.WriteLine("System Directory: {0}", Environment.SystemDirectory);
   }

}</source>

Current Directory: C:\Java_Dev\WEB\dev\CSharp
System Directory: C:\WINDOWS\system32

Accessing Environment Settings: Environment.MachineName and Environment.Version

<source lang="csharp">using System; class MainClass {

   public static void Main()
   {
       Console.WriteLine("Machine Name: {0}", Environment.MachineName);
       Console.WriteLine("Version: {0}", Environment.Version);
       
   }

}</source>

Machine Name: nfex
Version: 2.0.50727.42

Accessing Environment Settings: Environment.StackTrace

<source lang="csharp">using System; class MainClass {

   public static void Main()
   {
       Console.WriteLine("Stack Trace: {0}", Environment.StackTrace);
       
   }

}</source>

Stack Trace:    at System.Environment.GetStackTrace(Exception e, Boolean needFileInfo)
   at System.Environment.get_StackTrace()
   at MainClass.Main()

Accessing Environment Settings: Environment Variables

<source lang="csharp">using System; using System.Collections; class MainClass {

   public static void Main()
   {
       Console.WriteLine("Environment Variables");
       foreach (DictionaryEntry var in Environment.GetEnvironmentVariables())
           Console.WriteLine("{0}={1}", var.Key, var.Value);
       
   }

}</source>

Environment Variables
Path=C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Pr
ogram Files\Microsoft Visual Studio 8\VC\bin;C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;
...
...

Accessing Environment Settings: Get OS version

<source lang="csharp">using System; class MainClass {

   public static void Main(string[] args)
   {
   Console.WriteLine("Current OS:\n{0}\n", Environment.OSVersion);
   }

}</source>

Current OS:
Microsoft Windows NT 5.1.2600 Service Pack 2

Accessing Environment Settings: Logical Drives

<source lang="csharp">using System; using System.Collections; class MainClass {

   public static void Main()
   {
       Console.WriteLine("Logical Drives");
       foreach (string drive in Environment.GetLogicalDrives())
           Console.WriteLine("    {0}", drive);
       
   }

}</source>

Logical Drives
    C:\
    D:\

Access the command-line arguments directly through Environment.CommandLine

<source lang="csharp">using System; class MainClass {

   public static void Main(string[] args)
   {
       Console.WriteLine(Environment.rumandLine);
       foreach (string s in Environment.GetCommandLineArgs())
       {
           Console.WriteLine(s);
       }
   }

}</source>

main
main

Enumerate all special folders and display them

<source lang="csharp">using System; class MainClass {

   public static void Main() 
   {
       foreach (Environment.SpecialFolder s in 
           Enum.GetValues(typeof(Environment.SpecialFolder))) 
       {
           Console.WriteLine("{0} folder : {1}", 
               s, Environment.GetFolderPath(s));
       }
   }

}</source>

Desktop folder : C:\Documents and Settings\Joe\Desktop
Programs folder : C:\Documents and Settings\Joe\Start Menu\Programs
Personal folder : C:\Documents and Settings\Joe\My Documents
Personal folder : C:\Documents and Settings\Joe\My Documents
Favorites folder : C:\Documents and Settings\Joe\Favorites
Startup folder : C:\Documents and Settings\Joe\Start Menu\Programs\Startup
Recent folder : C:\Documents and Settings\Joe\Recent
SendTo folder : C:\Documents and Settings\Joe\SendTo
StartMenu folder : C:\Documents and Settings\Joe\Start Menu
MyMusic folder : C:\Documents and Settings\Joe\My Documents\My Music
DesktopDirectory folder : C:\Documents and Settings\Joe\Desktop
MyComputer folder :
Templates folder : C:\Documents and Settings\Joe\Templates
ApplicationData folder : C:\Documents and Settings\Joe\Application Data
LocalApplicationData folder : C:\Documents and Settings\Joe\Local Settings\Application Data
InternetCache folder : C:\Documents and Settings\Joe\Local Settings\Temporary Internet Files
Cookies folder : C:\Documents and Settings\Joe\Cookies
History folder : C:\Documents and Settings\Joe\Local Settings\History
CommonApplicationData folder : C:\Documents and Settings\All Users\Application Data
System folder : C:\WINDOWS\system32
ProgramFiles folder : C:\Program Files
MyPictures folder : C:\Documents and Settings\Joe\My Documents\My Pictures
CommonProgramFiles folder : C:\Program Files\Common Files

Environment.NewLine

<source lang="csharp">using System; using System.IO; static class MainClass {

   static void Main(string[] args)
   {
       Console.WriteLine(Environment.NewLine);
   }

}</source>

Expand Environment Variables

<source lang="csharp">using System; using System.Collections; class MainClass {

   public static void Main()
   {
       Console.WriteLine(Environment.ExpandEnvironmentVariables(
               "The Path on %computername% is %Path%"));
           
   }

}</source>

The Path on nfex is C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
...

Get the drives on this box

<source lang="csharp">using System; class MainClass {

   public static void Main(string[] args)
   {
     string[] drives = Environment.GetLogicalDrives();
     for(int i = 0; i < drives.Length; i++)
       Console.WriteLine("Drive {0} : {1}",  i, drives[i]);
   }

}</source>

Drive 0 : C:\
Drive 1 : D:\

Is AppDomain Finalizing For Unload(), Environment.HasShutdownStarted

<source lang="csharp">using System; using System.Runtime.InteropServices; using System.Diagnostics; public sealed class MainClass {

   static void Main()
   {
        AppDomain currentDomain = AppDomain.CurrentDomain;
        if( !currentDomain.IsFinalizingForUnload() &&!Environment.HasShutdownStarted ) {
           Console.WriteLine( "Failed to dispose of object!!!" );
           Console.WriteLine( "Object allocated at:" );
        }
   }

}</source>

Failed to dispose of object!!!
Object allocated at:

Retrieve all environment variables targeted at the process

<source lang="csharp">using System; using System.Collections; class MainClass {

   public static void Main()
   {
       IDictionary vars = Environment.GetEnvironmentVariables(
           EnvironmentVariableTarget.Process);
       foreach (string s in vars.Keys)
       {
           Console.WriteLine(s + " = " + vars[s]);
       }
           
   }

}</source>

Path = C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
...
...

Retrieve a named environment variable

<source lang="csharp">using System; using System.Collections; class MainClass {

   public static void Main()
   {
       Console.WriteLine("Path = " +
           Environment.GetEnvironmentVariable("Path"));
   }

}</source>

Path = C:\Program Files\Microsoft.NET\SDK\v2.0\Bin;
...

Unload the appdomains and check the working set

<source lang="csharp">using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Reflection; using System.Security; using System.Security.Permissions; using System.Security.Policy; public class MainClass {

   public static void Main()
   {
       List<AppDomain> ads = new List<AppDomain>();
       for (int i = 0; i < 10; i++)
       {
           AppDomain ad = AppDomain.CreateDomain(i.ToString());
           ad.DoCallBack(delegate { Type t = typeof(Uri); });
           ads.Add(ad);
       }
       Console.WriteLine("After loading System.dll into 10 AppDomains: {0}", Environment.WorkingSet);
       
       foreach (AppDomain ad in ads)
           AppDomain.Unload(ad);
       Console.WriteLine("After unloading the AppDomains: {0}", Environment.WorkingSet);
   }

}</source>

After loading System.dll into 10 AppDomains: 8544256
After unloading the AppDomains: 8519680

WorkingSet change After loading System.dll into 10 AppDomains

<source lang="csharp">using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Reflection; using System.Security; using System.Security.Permissions; using System.Security.Policy; public class MainClass {

   public static void Main()
   {
       List<AppDomain> ads = new List<AppDomain>();
       for (int i = 0; i < 10; i++)
       {
           AppDomain ad = AppDomain.CreateDomain(i.ToString());
           ad.DoCallBack(delegate { Type t = typeof(Uri); });
           ads.Add(ad);
       }
       Console.WriteLine("After loading System.dll into 10 AppDomains: {0}", Environment.WorkingSet);
   }

}</source>

After loading System.dll into 10 AppDomains: 8404992

WorkingSet change after loading the DLL

<source lang="csharp">using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Reflection; using System.Security; using System.Security.Permissions; using System.Security.Policy; public class MainClass {

   public static void Main()
   {
       Console.WriteLine("Before: {0}", Environment.WorkingSet);
       // Loads System.dll (if it"s not already loaded):
       Type uriType = typeof(Uri); 
       Console.WriteLine("After loading System.dll: {0}", Environment.WorkingSet);
   }

}</source>

Before: 4550656
After loading System.dll: 4964352