More of the most used APIs defined in the BCL?


Great comments from my last post… Here is my interpretations, comments\disagreements welcome 😉


 


1,System.Type.GetTypeFromHandle(System.RuntimeTypeHandle handle),15399


As was mentioned in my comments, this is from the C# keyword “typeof”


Type t = typeof (MyType) ;


2,System.Byte[,,].Set(Int32 ,Int32 ,Int32 ,Byte ),13122


This one and 5 were very interesting… Turned out to all be from the same place in WinFX where we initialize a very large matrix of character data.. here is a sampling….


    /// <summary>


    /// ArabicFSM, class defines the static finite states for the Arabic and Syriac unicode blocks. The class


    /// is used to shape unicode text runs passed in from the Arabic Open Type Engine.


    /// </summary>


    internal static unsafe class  ArabicFSM


    {…


        static  byte [,,] ArabicShapeStateMachine   =


        {


            //  ARSYFSM_SHAPE_NOTSHAPED


            //  0      1      2      3      4      5      6      7      8      9      10     11     12     13     14     15     16     17     18     19     20     21     22     23     24     25     26 


            {


                {NCYNS, NC_IS, NC_IS, NC_IS, NC_IS, NCYNS, NCNNS, NCNNS, NCNNS, NCNNS, NCNNS, NCNNS, NCNNS, NCNNS, NCNNS, NCNNS, NCNNS, NCNNS, NCNNS, NCNNS, NCNNS, NCNNS, NCNNS, NCYNS, NCYNS, NCYNS, NCYNS}, // 0-ARSYCH_NONJOIN,


                {INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, INVAL, NCYNS}, // 1-ARSYCH_DUALJOIN,



3,System.IDisposable.Dispose(),3488


From C#’s using statement such as:


using (StreamReader r = File.OpenText() ) {}


4,System.Resources.ResourceManager.GetObject(System.String name),2845


Many were from code that looks up an exception message text:


throw new MyException (rm.GetObject (“message”));
5,System.Byte[,].Set(Int32 ,Int32 ,Byte ),2692


Same basic idea as 2.



6,System.Text.StringBuilder.Append(System.String value),2588


No tricks here (that I found), really popular API – After all Appending is what StringBuilders are good for.



7,System.Collections.ArrayList.get_Count(),2229
8,System.Collections.IEnumerator.MoveNext(),2158
9,System.Collections.IEnumerator.get_Current(),2083


All of these are to support C# and VB’s foreach statement.. for example


foreach (Type t in Assembly.GetTypes () ) {


}


 


10,System.Collections.ArrayList.Add(System.Object value),2049


Like 6, no trick, just a popular API…


 

Comments (2)

  1. Vijay says:

    Brad, why do the numbers decrease so drastically for Dispose and further down ?? 15K, 13K and then 3.5K ; Whoa !

    I was wondering what would be the count for Object.Equals(..) ! I use this method pretty often compared to the more C++ styled == operator and somehow got the impression that every parameter check for methods, every constructor check on params, property assignment check should use this invariably to check whether valid data is being passed. Am i missing something here ??

    Also how about ‘is’ operator ?

  2. Panos Theofanopoulos says:

    #2,#5 I find this as *very* slow. AFAIK every access to ArabicShapeStateMachine will perform 3 bound checks. Why dont you use a flat array instead?

    #3 the majority is (imho) at foreach statements(they are about 2k enumerators that must be disposed)