Tag Archives: selfhosted

ServiceStack SelfHosted Performance Boost

ServiceStack is doing a great work in the REST API world with the plus given by mono support.

The basic way of Self Hosting uses the .NET HttpListener to power up a single thread serving requests, this quickly show up as the performance blottle neck (Basic Self Hosted).

Digging a little I found the extended (concurrent model on self hosted) that uses a thread pool to increase the overall performance.
(Thread Pool Self Hosted).

From my little experience with async in C#, I had the idea that maybe the awesome “smartthreadpool” library can be used to handle the async part of the self hosted application, so I give it a try.

The test bed, the ultra simple Hello service, with a little artificial work. (hard work I think).

    public class HelloRequest : IReturn<HelloResponse> {
        public string Name { get; set; }

    public class HelloResponse {
        public string Message { get; set; }
        public string Status { get; set; }

    public class HelloService : Service, IGet<HelloRequest> {
        private static Random r = new Random();

        public object Get(HelloRequest request) {
            var timer = new Stopwatch();


            while(timer.ElapsedMilliseconds < 100) 


            return new HelloResponse() {
                                           Message = "hello " + request.Name,
                                           Status = "OK -> " + timer.ElapsedMilliseconds

The use of the “SpinWait” aim to simulate real scenarios where work is actually performed, and the thread is not available until finished (unlike the Thread.Sleep() that release the thread to be used).

The test machine has the following specs.

Core i5 3570K
8GB DDR3 1866MHZ @ 1666MHZ
WIN 8 x64

the load test is performed using JMeter, all the applications tested were build on release mode with visual studio 2012, targeting .NET 3.5 and monitored by sysinternal process explorer.

First Scenario: AppHostHttpListenerBase

JMeter Results for AppHostHttpListenerBase



Second Scenario: AppHostHttpListenerLongRunningBase



Third Scenario: SmartThreadPool AppHostHttpListener (better response time average)



Fourth Scenario: SmarthThreadPool Build targeting Framework 4 (better response time and better throughput)


The Others, not really impressive but can be used.  Task Library and ThreadPool.

Task Library




the full code of this test  CODE