Browse Source

Merge branch 'aspnet' of https://github.com/pdonald/FrameworkBenchmarks into pdonald-aspnet

Patrick Falls 12 years ago
parent
commit
23123cc802

+ 10 - 7
aspnet/README.md

@@ -1,12 +1,13 @@
-# ASP.NET MVC on Mono and Windows
+# ASP.NET MVC on Windows and Mono
 
 ## Tests
 
 * JSON serialization
-* Single query
-* Multiple queries
+* Single database query
+* Multiple database queries
 * Server-side templates and collections
-* Updates
+* Database updates
+* Plaintext
 
 ## Versions
 
@@ -23,7 +24,7 @@
 
 * IIS 8 (Windows)
 * XSP 2.11.0.0 (3.0?) (Linux)
-* nginx 1.4.0 & XSP FastCGI (Linux)
+* nginx 1.4.1 & XSP FastCGI (Linux)
 
 **Web Stack**
 
@@ -47,7 +48,7 @@
 
     git clone git://github.com/mono/mono
     cd mono
-    git checkout mono-3.10
+    git checkout mono-3.0.10
     ./autogen.sh --prefix=/usr/local
     make get-monolite-latest
     make EXTERNAL_MCS=${PWD}/mcs/class/lib/monolite/gmcs.exe
@@ -60,4 +61,6 @@
     git checkout 3.0
     ./autogen.sh --prefix=/usr/local
     make
-    sudo make install
+    sudo make install
+    
+    mozroots --import --sync

+ 30 - 2
aspnet/benchmark_config

@@ -4,10 +4,25 @@
     "default": {
       "setup_file": "setup_iis",
       "os": "nt",
-      "json_url": "/json",
+      "json_url": "/json/default",
+      "plaintext_url": "/plaintext",
       "port": 8080,
       "sort": 90
     },
+    "jsonnet": {
+      "setup_file": "setup_iis",
+      "os": "nt",
+      "json_url": "/json/jsonnet",
+      "port": 8080,
+      "sort": 134
+    },
+    "servicestack": {
+      "setup_file": "setup_iis",
+      "os": "nt",
+      "json_url": "/json/servicestack",
+      "port": 8080,
+      "sort": 135
+    },
     "mysql-raw": {
       "setup_file": "setup_iis",
       "os": "nt",
@@ -60,10 +75,23 @@
     },
     "mono": {
       "setup_file": "setup_nginx",
-      "json_url": "/json",
+      "json_url": "/json/default",
+      "plaintext_url": "/plaintext",
       "port": 8080,
       "sort": 100
     },
+    "mono-jsonnet": {
+      "setup_file": "setup_nginx",
+      "json_url": "/json/jsonnet",
+      "port": 8080,
+      "sort": 136
+    },
+    "mono-servicestack": {
+      "setup_file": "setup_nginx",
+      "json_url": "/json/servicestack",
+      "port": 8080,
+      "sort": 137
+    },
     "mono-mysql-raw": {
       "setup_file": "setup_nginx",
       "db_url": "/ado/mysql",

+ 2 - 0
aspnet/lib/packages.config

@@ -9,4 +9,6 @@
   <package id="mongocsharpdriver" version="1.8.1" targetFramework="net45" />
   <package id="MySql.Data.Entity" version="6.7.2-beta-ef6" targetFramework="net45" />
   <package id="Npgsql.EF6" version="2.0.12-pre4" targetFramework="net45" />
+  <package id="Newtonsoft.Json" version="5.0.6" targetFramework="net45" />
+  <package id="ServiceStack.Text" version="3.9.48" targetFramework="net45" />
 </packages>

+ 2 - 2
aspnet/src/Application.cs

@@ -37,8 +37,8 @@ namespace Benchmarks.AspNet
 
             RouteTable.Routes.MapRoute(
                 name: "JSON",
-                url: "json",
-                defaults: new { controller = "Json", action = "Index" }
+                url: "json/{action}",
+                defaults: new { controller = "Json", action = "Default" }
             );
 
             RouteTable.Routes.MapRoute(

+ 7 - 0
aspnet/src/Benchmarks.AspNet.csproj

@@ -71,6 +71,12 @@
       <Private>True</Private>
       <HintPath>..\lib\Microsoft.Web.Infrastructure.1.0.0.0\lib\net40\Microsoft.Web.Infrastructure.dll</HintPath>
     </Reference>
+    <Reference Include="Newtonsoft.Json">
+      <HintPath>..\lib\Newtonsoft.Json.5.0.6\lib\net45\Newtonsoft.Json.dll</HintPath>
+    </Reference>
+    <Reference Include="ServiceStack.Text">
+      <HintPath>..\lib\ServiceStack.Text.3.9.48\lib\net35\ServiceStack.Text.dll</HintPath>
+    </Reference>
     <Reference Include="EntityFramework">
       <Private>True</Private>
       <HintPath>..\lib\EntityFramework.6.0.0-alpha3\lib\net45\EntityFramework.dll</HintPath>
@@ -110,6 +116,7 @@
   <ItemGroup>
     <Compile Include="Controllers\HomeController.cs" />
     <Compile Include="Controllers\JsonController.cs" />
+    <Compile Include="Controllers\PlaintextController.cs" />
     <Compile Include="Controllers\AdoController.cs" />
     <Compile Include="Controllers\EntityFrameworkController.cs" />
     <Compile Include="Controllers\MongoDBController.cs" />

+ 59 - 3
aspnet/src/Controllers/JsonController.cs

@@ -1,12 +1,68 @@
-using System.Web.Mvc;
+using System;
+using System.Web;
+using System.Web.Mvc;
 
 namespace Benchmarks.AspNet.Controllers
 {
     public class JsonController : Controller
     {
-        public ActionResult Index()
+        public ActionResult Default()
         {
-            return Json(new { message = "Hello World" }, JsonRequestBehavior.AllowGet);
+            return new JsonResult { Data = new { message = "Hello World" } };
+        }
+
+        public ActionResult JsonNet()
+        {
+            return new JsonNetResult { Data = new { message = "Hello World" } };
+        }
+
+        public ActionResult ServiceStack()
+        {
+            return new ServiceStackResult { Data = new { message = "Hello World" } };
+        }
+    }
+
+    public class JsonResult : ActionResult
+    {
+        public object Data
+        {
+            get;
+            set;
+        }
+
+        public override void ExecuteResult(ControllerContext context)
+        {
+            if (context == null)
+                throw new ArgumentNullException("context");
+
+            HttpResponseBase response = context.HttpContext.Response;
+            response.ContentType = "application/json";
+
+            if (Data != null)
+            {
+                response.Write(Serialize());
+            }
+        }
+
+        protected virtual string Serialize()
+        {
+            return new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Data);
+        }
+    }
+
+    public class JsonNetResult : JsonResult
+    {
+        protected override string Serialize()
+        {
+            return Newtonsoft.Json.JsonConvert.SerializeObject(Data);
+        }
+    }
+
+    public class ServiceStackResult : JsonResult
+    {
+        protected override string Serialize()
+        {
+            return ServiceStack.Text.JsonSerializer.SerializeToString(Data);
         }
     }
 }

+ 12 - 0
aspnet/src/Controllers/PlaintextController.cs

@@ -0,0 +1,12 @@
+using System.Web.Mvc;
+
+namespace Benchmarks.AspNet.Controllers
+{
+    public class PlaintextController : Controller
+    {
+        public ActionResult Index()
+        {
+            return Content("Hello, World!", "text/plain");
+        }
+    }
+}

+ 28 - 21
aspnet/src/Views/Index.cshtml

@@ -10,47 +10,54 @@
 
     <h2>JSON</h2>
     <ul>
-        <li><a href="/json">/json</a></li>
+        <li><em>Default serializer:</em> <a href="/json/default">/json/default</a></li>
+        <li><em>Json.NET</em> <a href="/json/jsonnet">/json/jsonnet</a></li>
+        <li><em>ServiceStack.Text</em> <a href="/json/servicestack">/json/servicestack</a></li>
+    </ul>
+
+    <h2>Plaintext</h2>
+    <ul>
+        <li><a href="/plaintext">/plaintext</a></li>
     </ul>
 
     <h2>ADO.NET (Raw)</h2>
     <h3>MySQL</h3>
     <ul>
-        <li><em>DB: </em> <a href="/ado/mysql">/ado/mysql</a></li>
-        <li><em>Queries: </em> <a href="/ado/mysql?queries=10">/ado/mysql?queries=10</a></li>
-        <li><em>Fortunes: </em> <a href="/ado/mysql/fortunes">/ado/mysql/fortunes</a></li>
-        <li><em>Update: </em> <a href="/ado/mysql/update?queries=10">/ado/mysql/update?queries=10</a></li>
+        <li><em>DB:</em> <a href="/ado/mysql">/ado/mysql</a></li>
+        <li><em>Queries:</em> <a href="/ado/mysql?queries=10">/ado/mysql?queries=10</a></li>
+        <li><em>Fortunes:</em> <a href="/ado/mysql/fortunes">/ado/mysql/fortunes</a></li>
+        <li><em>Update:</em> <a href="/ado/mysql/update?queries=10">/ado/mysql/update?queries=10</a></li>
     </ul>
     <h3>PostgreSQL</h3>
     <ul>
-        <li><em>DB: </em> <a href="/ado/postgresql">/ado/postgresql</a></li>
-        <li><em>Queries: </em> <a href="/ado/postgresql?queries=10">/ado/postgresql?queries=10</a></li>
-        <li><em>Fortunes: </em> <a href="/ado/postgresql/fortunes">/ado/postgresql/fortunes</a></li>
-        <li><em>Update: </em> <a href="/ado/postgresql/update?queries=10">/ado/postgresql/update?queries=10</a></li>
+        <li><em>DB:</em> <a href="/ado/postgresql">/ado/postgresql</a></li>
+        <li><em>Queries:</em> <a href="/ado/postgresql?queries=10">/ado/postgresql?queries=10</a></li>
+        <li><em>Fortunes:</em> <a href="/ado/postgresql/fortunes">/ado/postgresql/fortunes</a></li>
+        <li><em>Update:</em> <a href="/ado/postgresql/update?queries=10">/ado/postgresql/update?queries=10</a></li>
     </ul>
 
     <h2>Entity Framework (ORM)</h2>
     <h3>MySQL</h3>
     <ul>
-        <li><em>DB: </em> <a href="/entityframework/mysql">/entityframework/mysql</a></li>
-        <li><em>Queries: </em> <a href="/entityframework/mysql?queries=10">/entityframework/mysql?queries=10</a></li>
-        <li><em>Fortunes: </em> <a href="/entityframework/mysql/fortunes">/entityframework/mysql/fortunes</a></li>
-        <li><em>Update: </em> <a href="/entityframework/mysql/update?queries=10">/entityframework/mysql/update?queries=10</a></li>
+        <li><em>DB:</em> <a href="/entityframework/mysql">/entityframework/mysql</a></li>
+        <li><em>Queries:</em> <a href="/entityframework/mysql?queries=10">/entityframework/mysql?queries=10</a></li>
+        <li><em>Fortunes:</em> <a href="/entityframework/mysql/fortunes">/entityframework/mysql/fortunes</a></li>
+        <li><em>Update:</em> <a href="/entityframework/mysql/update?queries=10">/entityframework/mysql/update?queries=10</a></li>
     </ul>
     <h3>PostgreSQL</h3>
     <ul>
-        <li><em>DB: </em> <a href="/entityframework/postgresql">/entityframework/postgresql</a></li>
-        <li><em>Queries: </em> <a href="/entityframework/postgresql?queries=10">/entityframework/postgresql?queries=10</a></li>
-        <li><em>Fortunes: </em> <a href="/entityframework/postgresql/fortunes">/entityframework/postgresql/fortunes</a></li>
-        <li><em>Update: </em> <a href="/entityframework/postgresql/update?queries=10">/entityframework/postgresql/update?queries=10</a></li>
+        <li><em>DB:</em> <a href="/entityframework/postgresql">/entityframework/postgresql</a></li>
+        <li><em>Queries:</em> <a href="/entityframework/postgresql?queries=10">/entityframework/postgresql?queries=10</a></li>
+        <li><em>Fortunes:</em> <a href="/entityframework/postgresql/fortunes">/entityframework/postgresql/fortunes</a></li>
+        <li><em>Update:</em> <a href="/entityframework/postgresql/update?queries=10">/entityframework/postgresql/update?queries=10</a></li>
     </ul>
 
     <h2>MongoDB</h2>
     <ul>
-        <li><em>DB: </em> <a href="/mongodb">/mongodb</a></li>
-        <li><em>Queries: </em> <a href="/mongodb?queries=10">/mongodb?queries=10</a></li>
-        <li><em>Fortunes: </em> <a href="/mongodb/fortunes">/mongodb/fortunes</a></li>
-        <li><em>Update: </em> <a href="/mongodb/update?queries=10">/mongodb/update?queries=10</a></li>
+        <li><em>DB:</em> <a href="/mongodb">/mongodb</a></li>
+        <li><em>Queries:</em> <a href="/mongodb?queries=10">/mongodb?queries=10</a></li>
+        <li><em>Fortunes:</em> <a href="/mongodb/fortunes">/mongodb/fortunes</a></li>
+        <li><em>Update:</em> <a href="/mongodb/update?queries=10">/mongodb/update?queries=10</a></li>
     </ul>
 
 </body>