1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Diagnostics;  
  4. using System.Linq;  
  5. using System.Text;  
  6. using System.IO;  
  7. namespace Test  
  8. {  
  9.     static class LanguageFetures  
  10.     {  
  11.          
  12.         class ProcessData  
  13.         {  
  14.             public Int32 ID { getset; }  
  15.             public Int64 Memory { getset; }  
  16.             public string Name { getset; }  
  17.         }  
  18.           
  19.         static void DisplayProcesses( Func<Process, Boolean> match )   
  20.         {  
  21.             var processes = new List<ProcessData>();  
  22.             foreach (var process in Process.GetProcesses())  
  23.             {  
  24.                 if (match(process))  
  25.                     processes.Add(new ProcessData { ID = process.Id, Name = process.ProcessName, Memory = process.WorkingSet64 });  
  26.             }  
  27.             Console.WriteLine("Total Memory:{0}MB",processes.TotalMemory()/1024/1024);  
  28.  
  29.             var top2Memory = processes.OrderByDescending(process => process.Memory).Take(2).Sum(process=>process.Memory/1024/1024);  
  30.  
  31.             Console.WriteLine("Memory  consumed the two most hungry processes:{0}M",top2Memory);  
  32.  
  33.  
  34.         }  
  35.         static Int64 TotalMemory( this IEnumerable<ProcessData> processes )  
  36.         {  
  37.             Int64 result = 0;  
  38.             foreach (var process in processes)  
  39.             {  
  40.                 result += process.Memory;  
  41.             }  
  42.             return result;  
  43.         }  
  44.          static void Main( string[] args )  
  45.         {  
  46.             DisplayProcesses(process => process.WorkingSet64 >= 20 * 1024 * 1024);  
  47.  
  48.             Console.Read();  
  49.         }  
  50.     }  
  51. }