<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Saar Carmi</title><link>http://dotnetjunkies.com/WebLog/saarc/default.aspx</link><description>A .NET Blog</description><dc:language>en-US</dc:language><generator>CommunityServer 1.0 (Build: 1.0.1.50214)</generator><item><title>Team System - how to get tf.exe install folder ?</title><link>http://dotnetjunkies.com/WebLog/saarc/archive/2006/03/20/136090.aspx</link><pubDate>Mon, 20 Mar 2006 06:48:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:136090</guid><dc:creator>saarc</dc:creator><slash:comments>0</slash:comments><comments>http://dotnetjunkies.com/WebLog/saarc/comments/136090.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/saarc/commentrss.aspx?PostID=136090</wfw:commentRss><description>&lt;P&gt;You can find tf.exe under Visual Studio IDE folder, which is specified under the key:&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;value name: &lt;FONT&gt;InstallDir&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;So far it seems that&amp;nbsp;the install dir is written to the registry even if only the TFC is installed.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=136090" width="1" height="1"&gt;</description></item><item><title>Calling from .Net 1.1 to .Net 2.0</title><link>http://dotnetjunkies.com/WebLog/saarc/archive/2006/02/27/135635.aspx</link><pubDate>Mon, 27 Feb 2006 19:49:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:135635</guid><dc:creator>saarc</dc:creator><slash:comments>0</slash:comments><comments>http://dotnetjunkies.com/WebLog/saarc/comments/135635.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/saarc/commentrss.aspx?PostID=135635</wfw:commentRss><description>&lt;P&gt;Hi&lt;/P&gt;
&lt;P&gt;A process cannot load both .net frameworks 1.1 &amp;amp; 2.0.&lt;/P&gt;
&lt;P&gt;Therefore, to call 2.0 object from a 1.1 object, you must have a cross process call. One of the ways (but not the only) to do so,&amp;nbsp;is to host the 2.0 object within COM+ process and expose it as a COM object. To do so, your object must derive Serviced Component and be&amp;nbsp;marked as ComVisible.&lt;/P&gt;
&lt;P&gt;Here is a simple example.&lt;/P&gt;
&lt;P&gt;Save this as SimpleClient.cs&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;using System;&lt;BR&gt;using System.Reflection;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;public class SimpleClient&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;public static void Main()&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;Type t = Type.GetTypeFromProgID ("MyObject");&lt;BR&gt;&amp;nbsp;&amp;nbsp;System.Diagnostics.Debug.Assert (t != null);&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;object o = Activator.CreateInstance(t);&lt;BR&gt;&amp;nbsp;&amp;nbsp;Console.WriteLine (Environment.Version.ToString());&lt;BR&gt;&amp;nbsp;&amp;nbsp;t.InvokeMember ("Increment", BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, o, new object[0]);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Save this as MyObject.cs&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT&gt;using System;&lt;BR&gt;using System.Reflection;&lt;BR&gt;using System.EnterpriseServices;&lt;BR&gt;using System.Runtime.InteropServices;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;[assembly: ApplicationActivationAttribute(ActivationOption.Server)]&lt;BR&gt;[assembly: ApplicationName ("MyObject")]&lt;BR&gt;[assembly: AssemblyVersion("1.0.0.0")]&lt;BR&gt;[assembly: ApplicationAccessControl(false)]&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;[System.Runtime.InteropServices.ComVisible (true)]&lt;BR&gt;[Guid("65D66FCF-997E-4737-896D-60EEC0AF0E88")]&lt;BR&gt;public class MyObject : ServicedComponent&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;public void Increment ()&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;System.Windows.Forms.MessageBox.Show("COM CALL - " + Environment.Version.ToString());&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Create an snk file using the command "sn -k snk.snk"&lt;/P&gt;
&lt;P&gt;Complie &amp;amp; register both source files with the following command lines:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT&gt;"c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\csc" SimpleClient.cs&lt;BR&gt;"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc" /t:library MyObject.cs /keyfile:snk.snk&lt;BR&gt;"c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regsvcs" MyObject.dll&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=135635" width="1" height="1"&gt;</description></item><item><title>Decimal Percision - short code, strange problem</title><link>http://dotnetjunkies.com/WebLog/saarc/archive/2006/02/06/135082.aspx</link><pubDate>Mon, 06 Feb 2006 17:37:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:135082</guid><dc:creator>saarc</dc:creator><slash:comments>0</slash:comments><comments>http://dotnetjunkies.com/WebLog/saarc/comments/135082.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/saarc/commentrss.aspx?PostID=135082</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://groups.google.com/group/microsoft.public.dotnet.languages.csharp/browse_frm/thread/867f655285c0e04d/8a59fb7d2904c775?tvc=1&amp;amp;q=saar+decimal#8a59fb7d2904c775"&gt;http://groups.google.com/group/microsoft.public.dotnet.languages.csharp/browse_frm/thread/867f655285c0e04d/8a59fb7d2904c775?tvc=1&amp;amp;q=saar+decimal#8a59fb7d2904c775&lt;/A&gt;Could anyone help me to understand why in the following code sum1 is different from sum2? &lt;BR&gt;Basically it's the same calculation done. Keep in mind the x is 28 digits so it's within the range of decimal. &lt;BR&gt;
&lt;P&gt;&lt;BR&gt;decimal &amp;nbsp;x = (-0.0084682975822291150192357277M); &lt;BR&gt;decimal sum1 , sum2; &lt;BR&gt;
&lt;P&gt;sum2 = (3500.91M * x) + (x * 3500M + 822m); &lt;BR&gt;sum1 = (3500.91M * x) + (x * 3500M) + 822m; &lt;BR&gt;
&lt;P&gt;Console.WriteLine (sum1); &lt;BR&gt;Console.WriteLine (sum2); &lt;BR&gt;&lt;BR&gt;------------&lt;/P&gt;
&lt;P&gt;Well, &lt;A href="http://groups.google.com/group/microsoft.public.dotnet.languages.csharp/browse_frm/thread/867f655285c0e04d/8a59fb7d2904c775?tvc=1&amp;amp;q=saar+decimal#8a59fb7d2904c775"&gt;the reason&lt;/A&gt; is that the decimal type precision s not 28 right to the decimal digit, but 28 digits overall. Thanks for those who answered.&lt;/P&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=135082" width="1" height="1"&gt;</description></item><item><title>Singletons and inheritance</title><link>http://dotnetjunkies.com/WebLog/saarc/archive/2006/02/06/135081.aspx</link><pubDate>Mon, 06 Feb 2006 17:31:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:135081</guid><dc:creator>saarc</dc:creator><slash:comments>0</slash:comments><comments>http://dotnetjunkies.com/WebLog/saarc/comments/135081.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/saarc/commentrss.aspx?PostID=135081</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://msmvps.com/blogs/jon.skeet/comments/81502.aspx"&gt;Jon Skeet posted&lt;/A&gt; an example of Singletons and inheritance.&lt;/P&gt;
&lt;P&gt;What do you think about this generic singleton solution? This way you dont have to update the factory method with each subclass creation. It would be neater if the new generics' constraint would support parameters, but you can overcome it with abstract method CreateInstance which returns T.&lt;/P&gt;
&lt;P&gt;abstract class DataProvider&amp;lt;T&amp;gt; where T: new()&lt;BR&gt;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static T mInstance = new T();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public T Instance&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return mInstance;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public abstract void Connect();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class Oracle : DataProvider&amp;lt;Oracle&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override void Connect()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine ("Connecting to Oracle");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class SqlServer : DataProvider&amp;lt;Oracle&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public override void Connect()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine ("Connecting to Sql Server");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=135081" width="1" height="1"&gt;</description></item><item><title>MHO about ANTS</title><link>http://dotnetjunkies.com/WebLog/saarc/archive/2005/07/29/131624.aspx</link><pubDate>Fri, 29 Jul 2005 14:35:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:131624</guid><dc:creator>saarc</dc:creator><slash:comments>0</slash:comments><comments>http://dotnetjunkies.com/WebLog/saarc/comments/131624.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/saarc/commentrss.aspx?PostID=131624</wfw:commentRss><description>&lt;P&gt;Hi&lt;/P&gt;
&lt;P&gt;I have been using ANTS profiler for a while.&lt;BR&gt;There are 3 bullets I must say.&lt;/P&gt;
&lt;P&gt;1. I find the new interface very inconvenite:&lt;BR&gt;&amp;nbsp;In the hierarchy view, the windows of the called methods and caller methods &lt;BR&gt;&amp;nbsp;should be placed one above the other and not side by side to allow better&lt;BR&gt;&amp;nbsp;view of methods with long names.&lt;BR&gt;&amp;nbsp;&lt;BR&gt;2. The source view must have a Reload button. If you switch to source view &lt;BR&gt;and the ANTS cannot find the source code file, it shows a File Open dialog.&lt;BR&gt;If you accidently press Esc, the is no way to get back to this dialog, unless you&lt;BR&gt;restart ANTS.&lt;/P&gt;
&lt;P&gt;3. If A calls C and B calls C, when you look in the hierarchy window for methods A calls,&lt;BR&gt;you see the full cost of C (i.e. calls from A and from C). Why do you have &lt;BR&gt;to switch to source code window to see the specific cost of calling C from A?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=131624" width="1" height="1"&gt;</description></item><item><title>Late bound event registration via reflection</title><link>http://dotnetjunkies.com/WebLog/saarc/archive/2005/02/23/56342.aspx</link><pubDate>Wed, 23 Feb 2005 18:40:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:56342</guid><dc:creator>saarc</dc:creator><slash:comments>7</slash:comments><comments>http://dotnetjunkies.com/WebLog/saarc/comments/56342.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/saarc/commentrss.aspx?PostID=56342</wfw:commentRss><description>&lt;P&gt;I was asked how to register to an event via reflection.&lt;/P&gt;
&lt;P&gt;It is described &lt;A href="http://groups.google.co.il/groups?hl=iw&amp;amp;lr=&amp;amp;threadm=Xns91E45DE3163saarbigfootcom%40207.46.230.185&amp;amp;rnum=1&amp;amp;prev=/groups%3Fhl%3Diw%26lr%3D%26selm%3DXns91E45DE3163saarbigfootcom%2540207.46.230.185"&gt;here&lt;/A&gt;&lt;/P&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=56342" width="1" height="1"&gt;</description></item><item><title>Reactivating the IntelliSense (Code Completion) - after using Resharper</title><link>http://dotnetjunkies.com/WebLog/saarc/archive/2005/02/15/54455.aspx</link><pubDate>Tue, 15 Feb 2005 12:36:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:54455</guid><dc:creator>saarc</dc:creator><slash:comments>6</slash:comments><comments>http://dotnetjunkies.com/WebLog/saarc/comments/54455.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/saarc/commentrss.aspx?PostID=54455</wfw:commentRss><description>&lt;P&gt;Reactivating the IntelliSense (Code Completion) after disabling Resharper&lt;/P&gt;
&lt;P&gt;I recently installed the &lt;A href="http://www.jetbrains.com/resharper/"&gt;Resharper&lt;/A&gt; trail version. &lt;BR&gt;When the trail version expires and does not complete the code statement, Visual Studio 2003 does not automatically shows the code completion options instead.&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff1493&gt;To reactivate the code completion &amp;#8211; go to:&lt;BR&gt;Tools mean -&amp;gt; Options -&amp;gt; Text Editor -&amp;gt; C#&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;and check the first three checkboxes on the right pane.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=54455" width="1" height="1"&gt;</description></item><item><title>Server GC configuration</title><link>http://dotnetjunkies.com/WebLog/saarc/archive/2005/02/15/54436.aspx</link><pubDate>Tue, 15 Feb 2005 08:27:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:54436</guid><dc:creator>saarc</dc:creator><slash:comments>4</slash:comments><comments>http://dotnetjunkies.com/WebLog/saarc/comments/54436.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/saarc/commentrss.aspx?PostID=54436</wfw:commentRss><description>&lt;P&gt;In &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38&amp;amp;displaylang=en"&gt;.Net Framework&amp;nbsp;1.1 SP1&lt;/A&gt;, the server GC is supported for any type of application by setting the &lt;/P&gt;
&lt;P&gt;&lt;FONT color=#800080&gt;&amp;lt;gcserver enabled="true"/&amp;gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;setting in the applications configuration file&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;In 1.1 only ASP.NET&amp;nbsp;and COM+ application used the Server GC by default. (on multi processors machines). &amp;nbsp;&lt;/P&gt;
&lt;P&gt;In 1.1 SP1, you can use the gcserver flag.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It is NOT recommended nor supported to &lt;A href="http://msdn.microsoft.com/msdnmag/issues/01/03/clr/default.aspx"&gt;implement your own host&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=54436" width="1" height="1"&gt;</description></item><item><title>Regsvcs error - "Insufficient state to deserialize the object.  More information is needed"</title><link>http://dotnetjunkies.com/WebLog/saarc/archive/2005/02/14/54338.aspx</link><pubDate>Mon, 14 Feb 2005 11:03:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:54338</guid><dc:creator>saarc</dc:creator><slash:comments>4</slash:comments><comments>http://dotnetjunkies.com/WebLog/saarc/comments/54338.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/saarc/commentrss.aspx?PostID=54338</wfw:commentRss><description>&lt;P&gt;While you run Regsvcs you might get a message saying:&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#800080&gt;An unknown exception occurred during installation:&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#800080&gt;1: System.Runtime.Serialization.SerializationException - Insufficient state to deserialize the object.&amp;nbsp; More information is needed.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;This might occur because the assembly you are trying to register references another assembly that is missing (could be a versioning problem)&lt;/P&gt;
&lt;P&gt;You can use &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cptools/html/cpgrffusionlogviewerfuslogvwexe.asp"&gt;Fusion Log Viewer &lt;/A&gt;to determine which assembly is missing.&lt;/P&gt;
&lt;P&gt;---&lt;/P&gt;
&lt;P&gt;You can also get this message in other situations which are not related to Regsvcs.&lt;/P&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=54338" width="1" height="1"&gt;</description></item><item><title>Determine whether someone is registered on event</title><link>http://dotnetjunkies.com/WebLog/saarc/archive/2004/12/22/38241.aspx</link><pubDate>Wed, 22 Dec 2004 14:01:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:38241</guid><dc:creator>saarc</dc:creator><slash:comments>5</slash:comments><comments>http://dotnetjunkies.com/WebLog/saarc/comments/38241.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/saarc/commentrss.aspx?PostID=38241</wfw:commentRss><description>&lt;P&gt;A&amp;nbsp;friend of mine asked me how would he determine whether a someone is registered on event of a another class.&lt;/P&gt;
&lt;P&gt;If you want to check it from inside the class that defines the event, that's pretty easy - just check if the event field is not null. &lt;/P&gt;
&lt;P&gt;But, if you want to do it from out side (without having the option to recompile the class that publishes the event),&amp;nbsp; the C# compiler does not let you compile that code. The only way I found to do it, is by using Reflection&lt;/P&gt;
&lt;P&gt;Pay attention this is&lt;FONT color=#7fffd4&gt; &lt;/FONT&gt;&lt;FONT color=#ee82ee&gt;&lt;STRONG&gt;BAD CODING&lt;/STRONG&gt;&lt;/FONT&gt; - you are not allowed to access private fields of other classes.&lt;/P&gt;
&lt;P&gt;&amp;lt;code&amp;gt;&lt;BR&gt;using System;&lt;BR&gt;using System.Reflection;&lt;BR&gt;using System.Windows.Forms;&lt;/P&gt;
&lt;P&gt;public class A &lt;BR&gt;{&lt;BR&gt;&amp;nbsp;public event EventHandler MyEvent;&lt;BR&gt;&amp;nbsp;public void AB()&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;if (MyEvent!= null) //compiles&lt;BR&gt;&amp;nbsp;&amp;nbsp;{}&lt;BR&gt;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;public class B&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;public static void MyEventHandler (object source, EventArgs args)&lt;BR&gt;&amp;nbsp;{}&lt;BR&gt;&amp;nbsp;public static void Main()&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;A a = new A();&lt;BR&gt;&amp;nbsp;&amp;nbsp;//if (MyEvent!= null) //compilation error&lt;BR&gt;&amp;nbsp;{}&lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;IsRegistered (a);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;a.MyEvent += new EventHandler (MyEventHandler);&lt;BR&gt;&amp;nbsp;&amp;nbsp;IsRegistered (a);&lt;BR&gt;&amp;nbsp;}&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;&amp;nbsp;private static void IsRegistered (A a)&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;Type t = a.GetType();&lt;BR&gt;&amp;nbsp;&amp;nbsp;FieldInfo fld =t.GetField ("MyEvent", BindingFlags.NonPublic&amp;nbsp; | BindingFlags.Instance);&lt;BR&gt;&amp;nbsp;&amp;nbsp;System.Diagnostics.Debug.Assert (fld != null);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;Object o = fld.GetValue (a);&lt;BR&gt;&amp;nbsp;&amp;nbsp;System.Diagnostics.Debug.Assert (o != null);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;BR&gt;&amp;nbsp;&amp;nbsp;EventHandler eh = (EventHandler)o;&lt;BR&gt;&amp;nbsp;&amp;nbsp;if (eh == null)&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine ("no one is registerd");&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;else&lt;BR&gt;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Console.WriteLine ("still registered");&lt;BR&gt;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;}&lt;BR&gt;&lt;/FONT&gt;}&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;lt;code&amp;gt;&lt;/P&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=38241" width="1" height="1"&gt;</description></item><item><title>Setting IIS to support Windows Authentication and Content Expiration by code</title><link>http://dotnetjunkies.com/WebLog/saarc/archive/2004/11/29/34099.aspx</link><pubDate>Mon, 29 Nov 2004 07:32:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:34099</guid><dc:creator>saarc</dc:creator><slash:comments>6</slash:comments><comments>http://dotnetjunkies.com/WebLog/saarc/comments/34099.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/saarc/commentrss.aspx?PostID=34099</wfw:commentRss><description>&lt;FONT size=2&gt;
&lt;P&gt;I was wondering how to set the IIS virtual directory to Windows Authentication during the application install time.&lt;/P&gt;
&lt;P&gt;Well, here is the code snip.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Using System.DirectoryServices;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff size=2&gt;const&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; MD_AUTH_NT &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;0x00000004&lt;/FONT&gt;&lt;FONT size=2&gt;; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;//Windows authentication schemes available.&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;DirectoryEntry folderRoot &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; DirectoryEntry(&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"IIS://localhost/W3SVC/1/Root/"&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;+&lt;/FONT&gt;&lt;FONT size=2&gt; virutalDirecty);&lt;/P&gt;
&lt;P&gt;folderRoot&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RefreshCache();&lt;/P&gt;
&lt;P&gt;folderRoot&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Properties[&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"AuthFlags"&lt;/FONT&gt;&lt;FONT size=2&gt;]&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Value &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; MD_AUTH_NT; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;//Windows authentication&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;folderRoot&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Properties[&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"HttpExpires"&lt;/FONT&gt;&lt;FONT size=2&gt;]&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Value &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"D, 86400"&lt;/FONT&gt;&lt;FONT size=2&gt;; &lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;//Content expiration after 1 day&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;folderRoot&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;CommitChanges();&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=34099" width="1" height="1"&gt;</description></item><item><title>ReaderWriterLock - Acquire lock with infinite timeout</title><link>http://dotnetjunkies.com/WebLog/saarc/archive/2004/10/19/29001.aspx</link><pubDate>Tue, 19 Oct 2004 05:50:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:29001</guid><dc:creator>saarc</dc:creator><slash:comments>7</slash:comments><comments>http://dotnetjunkies.com/WebLog/saarc/comments/29001.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/saarc/commentrss.aspx?PostID=29001</wfw:commentRss><description>&lt;P&gt;The documantion of the methods &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemthreadingreaderwriterlockclassacquirereaderlocktopic1.asp"&gt;AcquireReaderLock&lt;/A&gt; and &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemthreadingreaderwriterlockclassacquirewriterlocktopic1.asp"&gt;AcquireWriteLock &lt;/A&gt;do not include information about how to get infinite timeout.&lt;/P&gt;
&lt;P&gt;The information is available in the &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemthreadingreaderwriterlockclasstopic.asp"&gt;class's documentation&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Anyway, you can use the value &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemthreadingtimeoutclassinfinitetopic.asp"&gt;Timeout.Infinite&lt;/A&gt; (== -1) for infinite timeout.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=29001" width="1" height="1"&gt;</description></item><item><title>Binary Serialization of DataSets in .Net Framework 2.0</title><link>http://dotnetjunkies.com/WebLog/saarc/archive/2004/09/20/26119.aspx</link><pubDate>Mon, 20 Sep 2004 08:52:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:26119</guid><dc:creator>saarc</dc:creator><slash:comments>3</slash:comments><comments>http://dotnetjunkies.com/WebLog/saarc/comments/26119.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/saarc/commentrss.aspx?PostID=26119</wfw:commentRss><description>&lt;P&gt;I read &lt;A href="http://weblogs.asp.net/despos"&gt;Dino Esposito&lt;/A&gt;'s article about &lt;A href="http://msdn.microsoft.com/msdnmag/issues/04/10/CuttingEdge/default.aspx"&gt;Binary Serialization of DataSets In ADO.NET 2.0&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;DataSet serialization is a real pain in the .Net Framework 1.1.&lt;/P&gt;
&lt;P&gt;I made a test to check the size and time it take to serialize a DataSet.&lt;BR&gt;The test included memory serialization of the a DataSet with one table and 20,000 rows. &lt;/P&gt;
&lt;P&gt;I tested the serialization with inserted rows.&lt;/P&gt;
&lt;P&gt;The tests used BinaryFormatter and was run on framework version 2.0.40607.85.&lt;/P&gt;
&lt;P&gt;Here are the results:&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;.Net framework 1.1&lt;/FONT&gt; &lt;BR&gt;5,220,304 bytes , about 14.3 seconds&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;.Net framework 2.0 with RemotingFormatter = SerializationFormat.Xml :&lt;BR&gt;&lt;/FONT&gt;&amp;nbsp;5,800,442 bytes , about 13 seconds&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;.Net framework 2.0 with RemotingFormatter = SerializationFormat.Binary :&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp;1,727,292 bytes , &lt;STRONG&gt;&lt;FONT color=#008000 size=4&gt;about 1 minutes and 18 seconds&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#7fffd4&gt;&lt;/FONT&gt;&lt;BR&gt;------&lt;/P&gt;
&lt;P&gt;It seems that SerializationFormat indeed saves network traffic, but the problem is that it take too much time to create the serialization stream. There was no real performance change with unchanged rows (after calling to AcceptChanges).&lt;/P&gt;
&lt;P&gt;Do I miss anything?&lt;/P&gt;
&lt;P&gt;Here is the test code:&lt;/P&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;using&lt;/FONT&gt;&lt;FONT size=2&gt; System;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;using&lt;/FONT&gt;&lt;FONT size=2&gt; System&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Data;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;using&lt;/FONT&gt;&lt;FONT size=2&gt; System&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;IO;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;using&lt;/FONT&gt;&lt;FONT size=2&gt; System&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Runtime&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Serialization;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;using&lt;/FONT&gt;&lt;FONT size=2&gt; System&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Runtime&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Serialization&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Formatters&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Binary;&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;class&lt;/FONT&gt;&lt;FONT size=2&gt; Class1&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;[STAThread]&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;static&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;FONT size=2&gt; Main(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt;[] args)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;//Create a dataset with a scheme &lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;DataSet ds &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; DataSet();&lt;/P&gt;
&lt;P&gt;DataTable tbl &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; ds&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Tables&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"tbl"&lt;/FONT&gt;&lt;FONT size=2&gt;);&lt;/P&gt;
&lt;P&gt;tbl&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"a"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt;));&lt;/P&gt;
&lt;P&gt;tbl&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"b"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt;));&lt;/P&gt;
&lt;P&gt;tbl&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"c"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt;));&lt;/P&gt;
&lt;P&gt;tbl&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"d"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt;));&lt;/P&gt;
&lt;P&gt;tbl&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"e"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt;));&lt;/P&gt;
&lt;P&gt;tbl&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"f"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt;));&lt;/P&gt;
&lt;P&gt;tbl&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"g"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(Byte));&lt;/P&gt;
&lt;P&gt;tbl&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"y"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt;));&lt;/P&gt;
&lt;P&gt;tbl&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"i"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt;));&lt;/P&gt;
&lt;P&gt;tbl&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"j"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt;));&lt;/P&gt;
&lt;P&gt;tbl&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"k"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt;));&lt;/P&gt;
&lt;P&gt;tbl&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"l"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt;));&lt;/P&gt;
&lt;P&gt;tbl&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"m"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt;));&lt;/P&gt;
&lt;P&gt;tbl&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"n"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt;));&lt;/P&gt;
&lt;P&gt;tbl&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"o"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;FONT size=2&gt;));&lt;/P&gt;
&lt;P&gt;tbl&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"p"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(DateTime));&lt;/P&gt;
&lt;P&gt;tbl&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Columns&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"q"&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;typeof&lt;/FONT&gt;&lt;FONT size=2&gt;(DateTime));&lt;/P&gt;
&lt;P&gt;ds&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;RemotingFormat &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; SerializationFormat&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Xml;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;//Load rows into dataset&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;for&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; i &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;0&lt;/FONT&gt;&lt;FONT size=2&gt;; i &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;20000&lt;/FONT&gt;&lt;FONT size=2&gt;; i&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;++&lt;/FONT&gt;&lt;FONT size=2&gt;)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;ds&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Tables[&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"tbl"&lt;/FONT&gt;&lt;FONT size=2&gt;]&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Rows&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Add (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;object&lt;/FONT&gt;&lt;FONT size=2&gt;[] {&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;0&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;1&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"a"&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;2&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;3&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"ab"&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;4&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;5&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;6&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;7&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;8&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;9&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;10&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;11&lt;/FONT&gt;&lt;FONT size=2&gt;,&lt;/FONT&gt;&lt;FONT color=#ff0000 size=2&gt;"abcd"&lt;/FONT&gt;&lt;FONT size=2&gt;,DateTime&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Now,DateTime&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Now});&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;MemoryStream ms;&lt;/P&gt;
&lt;P&gt;BinaryFormatter bf &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; BinaryFormatter();&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;//Record the start time&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;DateTime s &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; DateTime&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Now;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;for&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;FONT size=2&gt; i &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;0&lt;/FONT&gt;&lt;FONT size=2&gt;; i &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#ff00ff size=2&gt;10&lt;/FONT&gt;&lt;FONT size=2&gt;; i&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;++&lt;/FONT&gt;&lt;FONT size=2&gt;)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;//Serialize the dataset into memory&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;using&lt;/FONT&gt;&lt;FONT size=2&gt; (ms &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;FONT size=2&gt; MemoryStream())&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;bf&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Serialize (ms, ds);&lt;/P&gt;
&lt;P&gt;Console&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;WriteLine (ms&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Position);&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#008000 size=2&gt;//Record the end time&lt;/P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;DateTime e &lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;=&lt;/FONT&gt;&lt;FONT size=2&gt; DateTime&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Now;&lt;/P&gt;
&lt;P&gt;Console&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;WriteLine (e&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;-&lt;/FONT&gt;&lt;FONT size=2&gt;s);&lt;/P&gt;
&lt;P&gt;Console&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;WriteLine (System&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Environment&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;Version&lt;/FONT&gt;&lt;FONT color=#00ffff size=2&gt;.&lt;/FONT&gt;&lt;FONT size=2&gt;ToString());&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=26119" width="1" height="1"&gt;</description></item><item><title>Microsoft .Net on the Beach</title><link>http://dotnetjunkies.com/WebLog/saarc/archive/2004/09/08/24831.aspx</link><pubDate>Wed, 08 Sep 2004 18:28:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:24831</guid><dc:creator>saarc</dc:creator><slash:comments>5</slash:comments><comments>http://dotnetjunkies.com/WebLog/saarc/comments/24831.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/saarc/commentrss.aspx?PostID=24831</wfw:commentRss><description>&lt;P&gt;Microsoft Israel is having another &lt;A href="http://www.microsoft.com/israel/events/msdn/invitation.asp"&gt;.Net event&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;I'll be there.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=24831" width="1" height="1"&gt;</description></item><item><title>GetCurrentProcess - Performance Issue</title><link>http://dotnetjunkies.com/WebLog/saarc/archive/2004/09/05/24485.aspx</link><pubDate>Sun, 05 Sep 2004 15:27:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:24485</guid><dc:creator>saarc</dc:creator><slash:comments>6</slash:comments><comments>http://dotnetjunkies.com/WebLog/saarc/comments/24485.aspx</comments><wfw:commentRss>http://dotnetjunkies.com/WebLog/saarc/commentrss.aspx?PostID=24485</wfw:commentRss><description>&lt;P&gt;I used the following code line to get the process name. (Our application calls that line once in each execution).&lt;BR&gt;&lt;FONT color=#ff0000&gt;System.Diagnostics.Process.GetCurrentProcess().ProcessName&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Out client installed the application on two machines:&lt;BR&gt;This first one is Compaq dual process. It takes about &lt;FONT color=#7fffd4&gt;0.3 seconds&lt;/FONT&gt; to run that line.&lt;/P&gt;
&lt;P&gt;The other machine is a 4 CPU partition of Unisys machine. On that machine it takes&lt;FONT color=#ff0000&gt; &lt;FONT size=4&gt;between 1 to 50 seconds&lt;/FONT&gt;&lt;/FONT&gt; to execute that code.&lt;/P&gt;
&lt;P&gt;I could find what causes that difference.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://dotnetjunkies.com/WebLog/aggbug.aspx?PostID=24485" width="1" height="1"&gt;</description></item></channel></rss>