[Mono-bugs] [Bug 82365][Maj] New - WebClient Performance loss from 1.x to 2.x

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Wed Aug 8 01:57:11 EDT 2007

Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by miguel at ximian.com.


--- shadow/82365	2007-08-08 01:57:11.000000000 -0400
+++ shadow/82365.tmp.28687	2007-08-08 01:57:11.000000000 -0400
@@ -0,0 +1,65 @@
+Bug#: 82365
+Product: Mono: Class Libraries
+Version: 1.0
+OS Details: 
+Status: NEW   
+Priority: Major
+Component: System
+AssignedTo: mono-bugs at ximian.com                            
+ReportedBy: miguel at ximian.com               
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+Summary: WebClient Performance loss from 1.x to 2.x
+The WebClient has had a performance loss in going from 1.x to 2.x, the
+following program on a fast network will yield slower results if compiled
+with gmcs:
+using System;
+using System.IO;
+using System.Net;
+class Test {
+        static void Main (string[] args) {
+                string url = args[0];
+                WebClient wc = new WebClient();
+                DateTime start = DateTime.Now;
+                wc.DownloadFile(url, "downloaded");
+                TimeSpan elapsed = DateTime.Now - start;
+                FileInfo info = new FileInfo("downloaded");
+                long length = info.Length;
+                Console.WriteLine("{0} kB/s", (length / 1024.0) /
+        }
+I instrumented the code in DownloadFile to ensure that the time was
+actually being spent in the body of the download routine instead of the
+various configuration (that are quite different between 1.x and 2.x and
+that pollute the --trace output).
+One interesting observation is that for a large download, I noticed this by
+sorting the output of trace:
+for mcs, the top counts for method calls:
+    222 LEAVE: (wrapper managed-to-native)
+System.Threading.Monitor:Monitor_try_enter (object,int)TRUE:1
+    223 LEAVE: (wrapper managed-to-native)
+System.Threading.Monitor:Monitor_exit (object)
+    256 LEAVE: System.Threading.Monitor:Exit (object)
+    293 LEAVE: System.Threading.Monitor:Enter (object)
+for gmcs:
+    621 LEAVE: (wrapper managed-to-native)
+System.Threading.Monitor:Monitor_try_enter (object,int)TRUE:1
+    640 LEAVE: (wrapper managed-to-native)
+System.Threading.Monitor:Monitor_exit (object)
+    769 LEAVE: System.Threading.Monitor:Enter (object)
+    776 LEAVE: System.Threading.Monitor:Exit (object)
+We might be too trigger happy with the locks in 2.x

More information about the mono-bugs mailing list