I ran the performance test code included in QuickFix C++ and got the results below. As far as I can tell, this looks excellent. And I am running a commodity home desktop not a high-end trading server used by big shops. The build was done with VS 2012 at full optimization.
G:\projects\quickfix\test\release\pt>pt.exe -p 15000 -c 1000000
Converting integers to strings:
num: 1000000, seconds: 0.016, num_per_second: 6.25e+007
Converting strings to integers:
num: 1000000, seconds: 0, num_per_second: 1.#INF
Converting doubles to strings:
num: 1000000, seconds: 0.5, num_per_second: 2e+006
Converting strings to doubles:
num: 1000000, seconds: 0.219, num_per_second: 4.56621e+006
Creating Heartbeat messages:
num: 1000000, seconds: 0.75, num_per_second: 1.33333e+006
Identifying message types:
num: 1000000, seconds: 0.062, num_per_second: 1.6129e+007
Serializing Heartbeat messages to strings:
num: 1000000, seconds: 0.516, num_per_second: 1.93798e+006
Serializing Heartbeat messages from strings:
num: 1000000, seconds: 1.094, num_per_second: 914077
Creating NewOrderSingle messages:
num: 1000000, seconds: 2.312, num_per_second: 432526
Serializing NewOrderSingle messages to strings:
num: 1000000, seconds: 0.75, num_per_second: 1.33333e+006
Serializing NewOrderSingle messages from strings:
num: 1000000, seconds: 3.188, num_per_second: 313676
Creating QuoteRequest messages:
num: 1000000, seconds: 41.547, num_per_second: 24069.1
Serializing QuoteRequest messages to strings:
num: 1000000, seconds: 3.734, num_per_second: 267809
Serializing QuoteRequest messages from strings:
num: 1000000, seconds: 26.672, num_per_second: 37492.5
Reading fields from QuoteRequest message:
num: 1000000, seconds: 15.89, num_per_second: 62932.7
Storing NewOrderSingle messages:
num: 1000000, seconds: 3.485, num_per_second: 286944
Validating NewOrderSingle messages with no data dictionary:
num: 1000000, seconds: 0.11, num_per_second: 9.09091e+006
Validating NewOrderSingle messages with data dictionary:
G:\projects\quickfix\test\release\pt>