This is an interesting post on how to tweak the IL code. And here is an example on how to modify the IL code for a speacial case of tail recursion, to remove the stack overflow error.
Playing with IL code
July 31, 2007 by learningdotnetVisual Studio profiler : Difference between Elapsed and Application Time
July 19, 2007 by learningdotnetI had been struggling to understand what does the terms mean in the VS profiler. The following two posts helped me to understand
http://blogs.msdn.com/profiler/archive/2004/08/04/208286.aspx
http://blogs.msdn.com/profiler/archive/2004/06/09/152023.aspx
searching text in file using boyer moore algo
July 17, 2007 by learningdotnetWhile looking out for algorithms to search text in a file. I found Boyer-Moore algo to be fastest one, you can get the c# code for the algorithm from http://www.codeproject.com/cs/algorithms/bmsearch.asp
Epsilon
July 11, 2007 by learningdotnetEpsilon ε is the fifth letter of Greek alphabet , in calculas an arbitary small positive quantity is denoted as ε.
In dot net Double.epsilon field represents the smallest positive Double value greater than zero.
The field is constant and according to MSDN its value is 4.94065645841247e-324.
Defining variable
July 5, 2007 by learningdotnetCan you declare variables on demand? I mean to say whenever in my code, I need a variable- I declare the variable, will this improve the performance of my application?
The answer is no, the CLR defines all the variables of a function at the starting of the funtion, so no performance benifits etc., this can be checked by reading the IL of the code using ILDASM.
more command
June 24, 2007 by learningdotnetI have created the following code snippet to print the Application.cfm file content, paginated on the system console (similar to the more command)
TextReader tr = new StreamReader(@”c:\Application.cfm”);
while (tr.Peek() != -1)
{
System.Console.WriteLine(tr.ReadLine());
if (System.Console.CursorTop >= System.Console.WindowHeight – 4)
{
System.Console.WriteLine(“Press any key to continue…”);
System.Console.ReadKey(true);
System.Console.Clear();
}
}
System.Console.ReadKey(true);
chap 1
June 24, 2007 by learningdotnetI have finished reading the first chapter, and following are my notes
- using directive directly inside the namespace is invalid
- using directive statements are not commulative
- a class not nested in any namespace is in the global namespace
- namespaces can be nested
- Main is entry point a C# program and Main can be in a class or a struct
- Main method can be private
- Main method cannot be overloaded
- If there are multiple classes with Main method then you can set startup in the project properties
- the default exit code for an application is zero,The exit code of a process is stored in the Process Environment Block (PEB) and readable through the GetExitCodeProcess API.
- ? to declare a Nullable <T> type
- Read here to understand why Nullable type struct was introduced
- ?? to check for null value
- C# switch does not allow cascading between switch case statements, it is only allowed if case does not have any statements defined
- switch(k) where k can be int, char, enum or string type or any object, value or ref which can be converted to these types
- The foreach statement confirms that the enumerator or elements of the collection are disposable objects. If so, the foreach statement calls the Dispose method on the applicable objects. Disposable objects implement the IDisposable interface.
Learning C#
June 24, 2007 by learningdotnetI have picked the book “Programming Visual c# 2005″ to be read from cover to cover.
boxing
June 24, 2007 by learningdotnetWhat is boxing and unboxing?
http://msdn.microsoft.com/msdnmag/issues/1200/dotnet/
Advantage?
To convert a value type to reference type
Disadvantage?
Performance
Best practice:
int i = 10;
Console.Writeline(“i = ” + i + ” ” + i);
Writeline invokes String Concat(object arg1, object arg2) method to generate the string to be passed on to Writeline method.
Now here when passing the value of i boxing happens. If there is a reptead use of a variable in the Writeline statement it can explicitly boxed and then passed on to the Writeline function.
Which is faster?
int i =10;
or
System.Int32 i =10;
Ans:Both will generate the same IL code
generic class
June 24, 2007 by learningdotnetWill the following code compile ?
class testgeneric<type>
{
type _i;
public type I
{
get { return _i; }
set { _i = value; }
}
}
class testgeneric
{
int _i;
public int I
{
get { return _i; }
set { _i = value; }
}
}
Ans: Yes