Is it worth to set the service with ConcurrencyMode.Multiple and InstanceContextMode.Single attributes to save some performance when using named pipes ?
I mean when I do so I have to bother with multithreading issues.
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
I automatically use ConcurrencyMode.Multiple for my WCF services, because I normally expect a service to be able to handle multiple requests at the same time. To me, this seems like the most intuitive behaviour for a service (ie: it would be strange if I called a web service and had to wait for 10 outstanding requests from other users before I was attended to).
Using ConcurrencyMode.Single forces the service to process a single request at a time (in the event of multiple requests they are queued). This, potentially, will slow requests down.
But it depends on what each request does. Simple math calculations or string manipulations going to be so fast that the overhead of WCF will be your main bottleneck. If your service queries or modifies some sort of database, the time to do the database operation is likely to be your bottleneck. But if the database is small, or your only expecting a small number of clients, you’ll probably never notice the difference. If you’re pulling data from 5 web services and doing some complex merging operations, this might be a problem.
Unless you know you’ll have multiple simultaneous requests, run with ConcurrencyMode.Single until some sort of objective performance criteria cannot be met. Then, you’ll need to do the usual benchmarking to figure out what part of your service is the slowest. Speed that bit up. If it happens that ConcurrencyMode.Single is the slow bit, go for multiple instead!