-----------------------------------------------------------

New Message on BDOTNET

-----------------------------------------------------------
From: Sanjeeb
Message 1 in Discussion

 Hi Folks,   Here is the Statistics on the .NET framework 1.1. Doesn't it seem really 
reach?? :)   Borrowed from newsgroup. Courtsey: Dino Chiesa.   27 modules I counted 
(see the list below),
136 namespaces
4051 public types
7838 total types
429 public interfaces
593 public enums
2882 public classes

=====================================
here's the full data:   (csv, you can import it into Excel)

namespace name,#namespaces,public types, all types,public ifcs,all ifcs,pub
enums, all enums, pub classes, all classes
Microsoft.JScript,  3, 190, 326,  26,  26,  10,  19,154,275
Microsoft.VisualBasic,  2,  76, 122,   6,   8,  22,  32,41,74
Microsoft.VisualBasic.Compatibility,  1,  52,  76,   0,   0,   7,   9,45,59
Microsoft.VisualBasic.Vsa,  1,   8,   9,   0,   0,   0,   0,8,9
Microsoft.VisualC,  1,  10,  10,   0,   0,   0,   0,10,10
Microsoft.Vsa,  1,  20,  20,  13,  13,   4,   4,3,3
Microsoft.Vsa.Vb.CodeDOMProcessor,  1,   4,   4,   2,   2,   0,   0,2,2
mscorlib, 36, 874,1446, 124, 141, 111, 167,572,975
System, 21, 490, 842,  51,  56,  57,  95,376,641
System.Configuration.Install,  2,  14,  24,   1,   1,   1,   1,12,22
System.Data,  7, 213, 530,  15,  50,  60,  84,125,367
System.Design,  8, 188, 465,  44,  53,   8,  14,132,389
System.DirectoryServices,  1,  30,  63,   7,   7,   6,  11,17,38
System.Drawing,  6, 205, 261,   5,   6,  60,  67,128,161
System.Drawing.Design,  1,  13,  33,   0,   0,   0,   0,13,32
System.EnterpriseServices,  3, 105, 237,  19,  69,  20,  30,64,136
System.Management,  2,  77, 233,   2,  46,  11,  55,64,123
System.Messaging,  2,  53,  88,   1,   6,  17,  17,34,64
System.Runtime.Remoting,  5,  28, 194,   0,   5,   3,  16,25,173
System.Runtime.Serialization.Formatters.Soap,  1,   1,  50,   0,   2,   0,
15,1,32
System.Security,  1,  21,  41,   0,   0,   0,   2,21,38
System.ServiceProcess,  2,  30,  41,   0,   0,   8,   8,21,32
System.Web, 12, 326, 710,  20,  27,  45,  76,258,577
System.Web.RegularExpressions,  1,  15,  45,   0,   0,   0,   0,15,45
System.Web.Services,  5, 144, 294,   0,   3,  10,  16,134,271
System.Windows.Forms,  5, 648, 925,  87,  89, 104, 111,427,677
System.XML,  5, 216, 749,   6,  11,  29,  64,180,654
Total,136,4051,7838,429,621,593,913,2882,5879



=============================================
the code used to compute these numbers:

// CountClasses.cs
//
// Counts the number of classes in a selected list of assemblies for the
.NET framework.
// Uses the config file countClasses.xml to store the list of libraries to
load.
//
// to build:
//   csc /target:exe  CountClasses.cs
//
//
// dino chiesa
//
// Wed, 26 Jun 2002  16:35
//


using System;
using System.IO;
using System.Xml.Serialization;
using System.Reflection;

namespace dinoch.demo {

  public struct TypeCounts {
    public int enums;
    public int interfaces;
    public int classes;
    public int types;
  }

  public struct TypeStats {
    public TypeCounts Public;
    public TypeCounts All;
    public int Namespaces;

    public void Add(TypeStats ts) {
      this.Public.enums += ts.Public.enums;
      this.Public.interfaces += ts.Public.interfaces;
      this.Public.classes += ts.Public.classes;
      this.Public.types += ts.Public.types;

      this.All.enums += ts.All.enums;
      this.All.interfaces += ts.All.interfaces;
      this.All.classes += ts.All.classes;
      this.All.types += ts.All.types;

      this.Namespaces += ts.Namespaces;
    }
  }


  [XmlType(TypeName="Libraries")]
  [XmlRootAttribute(Namespace="", IsNullable=false)]
  public class LibraryList {
    [XmlElementAttribute("Library",
                         Form=System.Xml.Schema.XmlSchemaForm.Unqualified,
                         IsNullable=true)]
    public string[] Entry;
  }



  public class CountClasses {

    LibraryList ModuleList;
    public int Verbosity= 0;


    void ReadLibraryList() {
      FileStream fs = new FileStream("CountClasses.xml", FileMode.Open);
      XmlSerializer s= new XmlSerializer(typeof(LibraryList));
      ModuleList= (LibraryList) s.Deserialize(fs);
      fs.Close();
    }


    void Run() {

      TypeStats totals = new TypeStats();

      ReadLibraryList();

      //produce csv for display in MS Excel
      Console.WriteLine("namespace name,#namespaces,public types, all
types,public ifcs,all ifcs,pub enums, all enums, pub classes, all classes");
      for (int y = 0; y < ModuleList.Entry.Length; y++) {
        TypeStats mts=
DisplayNamespacesForModule(ModuleList.Entry[y].ToString().Trim());
        if (Verbosity==0) {

Console.WriteLine("{0},{1,3},{2,4},{3,4},{4,4},{5,4},{6,4},{7,4},{8},{9}",
                            ModuleList.Entry[y].ToString().Trim(),
                            mts.Namespaces,
                            mts.Public.types,
                            mts.All.types,
                            mts.Public.interfaces,
                            mts.All.interfaces,
                            mts.Public.enums,
                            mts.All.enums,
                            mts.Public.classes,
                            mts.All.classes);
        }
        totals.Add(mts);
      }


      Console.WriteLine("Total,{0},{1},{2},{3},{4},{5},{6},{7},{8}",
                        totals.Namespaces,
                        totals.Public.types,
                        totals.All.types,
                        totals.Public.interfaces,
                        totals.All.interfaces,
                        totals.Public.enums,
                        totals.All.enums,
                        totals.Public.classes,
                        totals.All.classes);

      Console.WriteLine("module count: " + ModuleList.Entry.Length);
    }




    private TypeStats DisplayNamespacesForModule(String moduleName) {

      System.Collections.ArrayList NameSpaceList   = new
System.Collections.ArrayList();
      System.Collections.Hashtable NameSpaceHash = new
System.Collections.Hashtable();
      Type[]    types;
      TypeStats ts= new TypeStats();

      try {
        if (Verbosity>0) Console.WriteLine("loading module '" + moduleName +
"'");
        // LoadWithPartialName = loads from GAC even without version info
for the assembly
        Module[]  modules =
Assembly.LoadWithPartialName(moduleName).GetModules();
        if (Verbosity>0) {
          Console.WriteLine("Successfully loaded module '" + moduleName +
"'");
          Console.WriteLine("found {0} modules in this assembly", +
modules.Length);
          Console.WriteLine("looking at module '{0}'", modules[0].Name);
        }

        types = modules[0].GetTypes();  // only the first ? why

        ts.All.types = types.Length ;

        foreach (Type t in types) {
          if (t.IsEnum)      ts.All.enums++;
          if (t.IsInterface) ts.All.interfaces++;
          if (t.IsClass)     ts.All.classes++;

          if (Verbosity>1) {
            Console.WriteLine("    {0}", t.FullName);
          }

          if (t.IsPublic || t.IsNestedPublic || t.IsNestedFamily) {
            ts.Public.types++;
            if (t.IsEnum)      ts.Public.enums++;
            if (t.IsInterface) ts.Public.interfaces++;
            if (t.IsClass)     ts.Public.classes++;
          }

          if ( t.Namespace != null  && t.IsPublic) {
            if (!NameSpaceHash.ContainsKey(t.Namespace)) {
              NameSpaceHash.Add(t.Namespace,"");
              ts.Namespaces++;
            }
          }
        }

      }
      catch (System.IO.FileNotFoundException e1) {
        Console.WriteLine("Cannot load assembly, File not found:\n  \"" +
e1.FileName + "\"");
      }
      catch ( System.NullReferenceException e2) {
        Console.WriteLine("Cannot load assembly, bad name?:\n  \"" +
moduleName + "\"" + e2);
      }

      if (Verbosity>0) {
        System.Collections.SortedList sl = new
System.Collections.SortedList(NameSpaceHash);
        Console.WriteLine("Namespaces: (" + sl.Keys.Count + ")");
        foreach (object o in sl.Keys)
          Console.WriteLine("  " + o.ToString());

      }
      return ts;
    }


    private static void DisplayUsage() {
      System.Console.WriteLine("usage::\n   countClasses.exe [-v]");
    }



    public static int Main(string[] args) {
      int verbose= 0;
      if (args.Length != 0) {
        foreach (string a in args) {
          if (a=="-v") {
            verbose++;
          }
          else {
            DisplayUsage();
            return 0;
          }
        }
      }

      CountClasses c = new CountClasses();
      c.Verbosity= verbose;
      c.Run();
      return 0;
    }
  }
}


=============================================
here's the XML file I used as input:

<?xml version="1.0" encoding="UTF-8"?>
    <Libraries>

        <Library> Microsoft.JScript                               </Library>
        <Library> Microsoft.VisualBasic                           </Library>
        <Library> Microsoft.VisualBasic.Vsa                       </Library>
        <Library> Microsoft.VisualBasic.Compatibility             </Library>
        <Library> Microsoft.VisualC                               </Library>
        <Library> Microsoft.Vsa                                   </Library>
        <Library> Microsoft.Vsa.Vb.CodeDOMProcessor               </Library>
        <Library> System                                          </Library>
        <Library> System.Configuration.Install                    </Library>
        <Library> System.Data                                     </Library>
        <Library> System.Design                                   </Library>
        <Library> System.DirectoryServices                        </Library>
        <Library> System.Drawing                                  </Library>
        <Library> System.Drawing.Design                           </Library>
        <Library> System.EnterpriseServices                       </Library>
        <Library> System.Management                               </Library>
        <Library> System.Messaging                                </Library>
        <Library> System.Runtime.Remoting                         </Library>
        <Library> System.Runtime.Serialization.Formatters.Soap    </Library>
        <Library> System.Security                                 </Library>
        <Library> System.ServiceProcess                           </Library>
        <Library> System.Web                                      </Library>
        <Library> System.Web.RegularExpressions                   </Library>
        <Library> System.Web.Services                             </Library>
        <Library> System.Windows.Forms                            </Library>
        <Library> System.XML                                      </Library>
        <Library> mscorlib                                        </Library>
    </Libraries>


-----------------------------------------------------------

To stop getting this e-mail, or change how often it arrives, go to your E-mail 
Settings.
http://groups.msn.com/bdotnet/_emailsettings.msnw

Need help? If you've forgotten your password, please go to Passport Member Services.
http://groups.msn.com/_passportredir.msnw?ppmprop=help

For other questions or feedback, go to our Contact Us page.
http://groups.msn.com/contact

If you do not want to receive future e-mail from this MSN group, or if you received 
this message by mistake, please click the "Remove" link below. On the pre-addressed 
e-mail message that opens, simply click "Send". Your e-mail address will be deleted 
from this group's mailing list.
mailto:[EMAIL PROTECTED]

Reply via email to