Tried to port my SIP parser from Python to D to boost performance but got opposite result. I created a simple test script which splits SIP REGISTER message 10 million times. Python version takes about 14 seconds to execute, D version is about 23 seconds which is 1.6 times slower. I used DMD 2.062 and compiled my script with options -release and -O. I used Python 3.3 64 bit. I ran both scripts on the same hardware with Windows 7 64. Is this general problem with string performance in D or just splitter() issue? Did anybody compared performance of D string manipulating functions with other languages like Python,Perl,Java and C++?
Here is Python version of test script: import time message = "REGISTER sip:comm.example.com SIP/2.0\r\n\ Content-Length: 0\r\n\ Contact: <sip:[email protected]:59788;transport=tls>;expires=4294967295;events=\"message-summary\";q=0.9\r\n\ To: <sip:[email protected]>\r\n\ User-Agent: (\"VENDOR=MyCompany\" \"My User Agent\")\r\n\ Max-Forwards: 70\r\n\ CSeq: 1 REGISTER\r\n\ Via: SIP/2.0/TLS 10.1.3.114:59788;branch=z9hG4bK2910497772630690\r\n\ Call-ID: 2910497622026445\r\n\ From: <sip:[email protected]>;tag=2910497618150713\r\n\r\n" t1 = time.perf_counter() for i in range(10000000): for notused in message.split("\r\n"): pass print(time.perf_counter()-t1) Here is D version: import std.stdio,std.algorithm,std.datetime; void main() { auto message = "REGISTER sip:example.com SIP/2.0\r\n~ Content-Length: 0\r\n~ Contact: <sip:[email protected]:59788;transport=tls>;expires=4294967295;events=\"message-summary\";q=0.9\r\n~ To: <sip:[email protected]>\r\n~ User-Agent: (\"VENDOR=MyCompany\" \"My User Agent\")\r\n~ Max-Forwards: 70\r\n~ CSeq: 1 REGISTER\r\n~ Via: SIP/2.0/TLS 10.1.3.114:59788;branch=z9hG4bK2910497772630690\r\n~ Call-ID: 2910497622026445\r\n~ From: <sip:[email protected]>;tag=2910497618150713\r\n\r\n"; auto t1 = Clock.currTime(); foreach(i; 0..10000000) { foreach(notused; splitter(message, "\r\n")) { } } writeln(Clock.currTime()-t1); }
