Datasnap Performance Test – En

To facilitate the following link version in English


Based on the work of Mr. Roberto Schneiders. Blog

decided to develop new performance test of datasnap along the same lines:

Use Delphi since version 7 and perhaps not the best person to test from scratch, I decided to ask permission to Mr Roberto Schneiders and use their sources as the basis for a new study, after talking with him I got permission and started the work.

As he opens his work, also my beginning: “It’s not difficult to hear the wonders of the embarcadero delphi presentations”, both in launching its products as the Delphi conference where I had the pleasure of participating in a 2013 wish I could go in 2014 but it was not possible, given that our Radstudio XE7 brings us to our beloved Delphi 7 and would be a great satisfaction to be able to meet Mr Marco Cantu.

History and motivation

Playing with DataSnap with the intention of starting a new project, I see that it is a great product, both for those who use the Rad so as to lovers of classes, poo, orm, tested in the laboratory and it worked fine, but on the client, from day to day how it would work ?, 300 customers in various locations using entering data, creating products, creating ??? reports, as over two layers paradigm for the three layers using the delphi does best, centering routines and interoperability, designed with the team came to the conclusion: + Delphi DataSnap (Http + Rest + Json) thus enabling full interoperability (everyone today uses rest + json) and centralization of the routines, I’m not here to test the functionality datasnap vs other solutions but its performance and stability to an extreme situation possible, before numerous clients available today and in the future.

Now comes the point that concerned us the raw, actually when we put a simulation using 200 machines datasnap (via Amazon Aws virtualization) this time we tested the datasnap the XE version, the project was stopped and when he left the XE5 resumed the project (Delphi DataSnap Server + + Aurelius (orm) + Rest + json) with clients in Delphi VCL Delphi FireMonkey + + Android (java) + Ios (xcode), and python with web client, we developed the initial framework and the documentation but in the middle of the project hit the doubt as this one today datasnap ?, took the sources of initial tests of Mr Roberto and started testing then follows our report, “we tested the DataSnap technology in order to know what level of performance and stability it provides, and to see if it really meets our requirements. our main requirement was the ability of the server to manage many simultaneous connections, once the application is large and used by many users. ”



Our goal was to test the DataSnap REST API and answer some questions:

How it behaves in an environment with many simultaneous connections?
What is the performance in critical condition?
It is stable in critical condition? ”
To paraphrase the blog of Roberto

Hardware Used:

NoteBook Delll 15R 4670 SE 3rd generation i7 with 8GB of memory and 1TB hard. (Server)

NoteBook Dell 15R 4670 SE 3rd generation i7 with 8GB of memory 1 1TB disk (Client)

Softwares used:

In order to compare used:

  • Datasnap (delphi xe4, Xe5, XE6, XE7) (vlc, console, iis), (with and without keepalive keepalive)
    Mormot (component free for delphi versions XE4, XE5, XE6, XE7)
    Sparkle (Http Server for Delphi TMS to XE4XE5XE6XE7 versions)
    Wcf VisualStudio 2012
    Node.js (only one core)
    Lazarus using


Used for testing:


In order to document the entire process took screenshots of all the screens during the process:


As the tests carried out:




Trying to simulate a network environment using two test situations:

Server on the same computer and Jmeter

Server on different computers on a gigabit network and Jmeter

tests created a HelloWorld function in each application and return json object HelloWorld.

Following opinion:


4 Variables tested:


Number of requests per second

CPU usage during

As a percentage of failures

Memory consumption during

Error rate


Operationalize the test:

  • Thread 1 and 100000 requests
  • 50 Threads and 100000 requests
  • 100 Threads and 100000  Requests


1 thread and 100000 requests

In this test both Delphi and other tools worked well, without mistakes or miss communication but on the other delphi ranked below only the 32-bit XE6 using iis and XE7 worked within an expected number:

Requests (qty per second)

Memory consumption (in MegaBytes):

Until version Xe5 the memory management was committed and the XE6 XE7 apparently been solved:

Usage of Cpu


apparently the same in all cases, except in the use of consoles by datasnap

Errors (% error)

Only the tool lazarus presented problems

now starts to get interesting

50 thread and 100000 requests

Requests (qty per second):

Even not giving time to put the iis with XE7 realize that is at the same level, but of course stable but much lower than the same tools delphi world:

Use of memory (in MegaBytes):

In XE7 Mr Marco Cantu and team did a good job in this same level of the others:

Usage of Cpu


apparently the same in all cases, except in the use of consoles by datasnap and the console versions

Errors (% error)

Until version XE6 still had always exceptions but in version XE7 with keepalive not appeared more


100 thread and 100000 requests

Requests (qty per second):

Almost the same thing (XE7 observation iis not in this list because I lost screen test and it takes about 4 hours to finish, but believe me this a little lower than the XE6)

Use of memory (in MegaBytes):

Errors (% error)

Until version xe5 had many mistakes but did a good job:



Follow spreadsheet data




It is clear that after the entry of Mr Marco Cantu as our product manager delphi, the datasnap improved, but the performance of this very world itself delphi tools below, I am impressed with the performance of mormot and Tms Sparkle made ​​in delphi, putting Wcf and node.js (using only one core, knowing that perhaps putting multiple cores it should improve a lot) in third and fourth placings respectively, we need to improve the performance, but I’m worried about taking care embarcadero now EMS, will leave us in hand with the datasnap ?, can put it in the cloud to serve 1,000 customers with android, ios, mac, windows ??


All examples were compiled and servers in virtual machines with just the version of Delphi used in release mode and tested the server


for those who want to test the servers follow the link sources and executables and screenshot!1Q1ghJRL!VhO919dfzKOdPYVT0b-N-GBE5PadgtStzuHUEWmi94U


DataSnap Performance Test -Pt Br

Baseado nos trabalhos do Sr  Roberto schneiders.   do blog

resolvi desenvolver novo teste de performance do datasnap nos mesmos moldes:

Uso delphi desde a versão 7 e talvez não seja a pessoa mais indicada para testar do zero, resolvi pedi autorização ao Sr  Roberto schneiders e usar seus fontes como base para um novo estudo, depois de conversar com ele recebi autorização e comecei os trabalhos.

Como ele abre seus trabalhos , também começo os meus: “Não é dificil ouvir das maravilhas do delphi nas apresentações da embarcadero” , tanto no lançamento dos seus produtos quanto na delphi conference onde tive o prazer de participar de uma 2013, gostaria de poder ir em 2014 mas não foi possível, tendo em vista que nosso Radstudio XE7 nos remete ao nosso querido Delphi 7 e seria uma grande satisfação conhecer ser possível o Sr Marco Cantu.

Histórico e motivação

Brincando com o Datasnap com a intenção de começar um novo projeto, vejo que é um ótimo produto, tanto pra quem usa o modo Rad quanto para os amantes de classes, poo , orm , testamos em laboratório e funcionou muito bem, mas no cliente , no dia a dia como isso funcionaria?,   300 clientes usando em diversas localidades entrando dados, criando produtos, gerando relatórios???, como passar do paradigma  duas camadas para o três camadas, usando o que o delphi tem de melhor, centralização de rotinas e interoperabilidade, pensado com a equipe chegamos a conclusão : Delphi + Datasnap (Http + Rest + Json)  possibilitando assim interoperabilidade plena(todo mundo hoje usa rest+json) e centralização das rotinas, não estou aqui para testar funcionalidades do datasnap vs outras soluções e sim sua performance e estabilidade diante de uma situação extrema e possível, diante dos inúmeros clientes disponíveis hoje e num futuro.

Agora vem o ponto que nos preocupou a matéria, realmente quando fomos colocar uma simulação de 200 maquinas usando datasnap (via virtualização Aws amazon) nesta época testávamos o datasnap da versão XE , o projeto ficou parado e quando saiu o XE5 retomamos o projeto (Servidor Delphi + Datasnap + Aurelius(orm) +Rest +json) com clientes em Delphi VCL + Delphi Firemonkey +Android (java) +Ios(xcode), e python com cliente web, desenvolvemos o framework e a documentação inicial mas no meio do projeto bateu a duvida como esta o datasnap hoje?, pegamos os fontes dos testes iniciais do Sr Roberto e começamos os testes segue abaixo então nosso parecer,”Testamos a tecnologia DataSnap, a fim de saber qual o nível de desempenho e estabilidade que proporciona, e para verificar se ele realmente atende às nossas exigências. Nosso principal requisito era a capacidade do servidor para gerenciar muitas conexões simultâneas, uma vez que a aplicação é grande e usado por muitos usuários”.



Nosso objetivo foi testar a API DataSnap REST e responder a algumas perguntas:

  • Como ele se comporta em um ambiente com muitas conexões simultâneas?
  • Qual é o desempenho em estado crítico?
  • É estável em estado crítico?”

Parafraseando o blog do Roberto

Hardware Utilizado:

NoteBook Delll 15R SE 4670 I7 3 geração com 8Gb de memoria e 1TB disco. (Servidor)

NoteBook Dell 15R SE 4670 I7 3 geração com 8Gb de memoria 1 1TB de disco(Cliente)

Softwares Utilizados:

Afim de comparação utilizamos:

  • Datasnap (delphi Xe4,Xe5,Xe6,Xe7) (vlc,console,iis) ,(com keepalive e sem keepalive)
  • Mormot (componente livre delphi para versões XE4,XE5,XE6,XE7),
  • Sparkle(Servidor Http da TMS para delphi, para versões XE4XE5XE6XE7)
  • Wcf VisualStudio 2012
  • Node.js(apenas um núcleo)
  • Lazarus utilizando

Para testes utilizamos:



Afim de documentar todo o processo tirei screenshots de todas as telas durante o processo:


Como procedeu os testes:



Tentando simular um ambiente de rede testamos usando duas situações :

No mesmo computador Servidor e Jmeter

em computadores diferentes Servidor e Jmeter numa rede gigabit

nos testes criamos uma função HelloWorld em cada aplicação e retornamos um objeto json HelloWorld .

Segue parecer:


Testamos 4 Variaveis:


Numero de requisições por segundo

Uso da Cpu durante o processo

Quanto de falhas em percentual

Consumo de memoria durante o processo

Taxa de erro


Operacionalizamos o teste com:

1 Thread e 100000 Requisições

50 Threads e 100000 Requisições

100 Threads e 100000 Requisições



1 thread e 100000 requisições

Neste teste tanto o delphi como as demais ferramentas funcionaram bem, sem erros ou perca na comunicação mas diante das demais o delphi ficou em abaixo,  apenas o xe6 32 bits usando iis e o xe7 funcionaram dentro de um numero esperado:

Requisições (qtd por segundo)

grafico 1 100


 Consumo de Memoria(em MegaBytes):

Até a versão Xe5 o gerenciamento de memoria estava comprometido do xe6 e xe7 aparentemente foi resolvido:

grafico 2 100


Uso de Cpu

(% )

aparentemente igual em todos os processos, exceto no uso de consoles pelo datasnap

grafico 3 100


Erros(% de erros)


Apenas na ferramenta do lazarus apresentou problemas

Lazarus 100000 - 1t



Agora comeca a ficar interessante

50 thread e 100000 requisições

Requisições(qtd por segundo):

Mesmo não dando tempo de colocar o iis com xe7 percebemos que fica no mesmo patamar, mas estvel é claro mas muito inferior a ferramentas mesmo do mundo delphi:

grafico 4 100


Uso de Memoria(em MegaBytes):

No Xe7 Sr Marco Cantu e Equipe fizeram um bom trabalho esta no mesmo patamar dos demais:


grafico 5 100

Uso de Cpu

(% )

aparentemente igual em todos os processos, exceto no uso de consoles pelo datasnap e nas versões de console

grafico 6 100

Erros(% de erros)

Até a versão xe6 ainda tinhamos sempre exceptions mas na versão xe7 com keepalive não apareceu mais

grafico 7 100



100 thread e 100000 requisições

Requisições(qtd por segundo):

Quase a mesma coisa (observação xe7 iis não esta na lista pois perdi a tela de teste e demora muito pra terminar 4 horas aproximadamente, mas acreditem esta um pouco menor que no xe6)

grafico 8 100


Uso de Memoria(em MegaBytes):

grafico 9 100



Erros (% de erros)

Até a versão xe5 tinhamos muitos erros mas fizeram um bom trabalho:

grafico 10 100




Segue planilha de dados


grafico 11 100



Fica claro que depois da entrada do Sr Marco Cantu como gerente de produto o nosso delphi,  o datasnap melhorou, mas em performance esta muito abaixo de ferramentas do próprio mundo delphi, fico impressionado com a performance do mormot e do Tms Sparkle feitos em delphi, colocando Wcf e node.js(usando apenas um núcleo, sabendo que talvez colocando vários núcleos isso deve melhorar e muito) em terceira e quartas colocações respectivamente, precisamos melhorar a performance , mas fico preocupado com a embarcadero cuidando agora do EMS , vão nos deixar na mão com o datasnap?, posso colocar isso na nuvem pra servir a 1000 clientes com android, ios, mac, windows??


Todos os exemplos e servidores foram compilados em maquinas virtuais com apenas a versão do delphi utilizado no modo release e testadas no servidor


para quem quiser testar o servidores segue link dos fontes e executáveis bem como screenshot!1Q1ghJRL!VhO919dfzKOdPYVT0b-N-GBE5PadgtStzuHUEWmi94U