Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C# Windows Application - Many threads using the same connection?

I've got a c# WINDOWS Application that is multi-threaded. It is my understanding that in a web environment, connections are pooled automatically. It is also my understanding that in a Windows app, this is not the case. Therefore, for a Windows app, the same connection should be used and not closed after each call, but instead closed when the app shuts down.

I'm curious though - is my correct? If it is, can two threads use the same connection to get a dataset from the DB at the same time or is that functionality queued up?

Thanks

like image 740
bugfixr Avatar asked Dec 23 '08 18:12

bugfixr


2 Answers

The Connection Pooling is one feature of ADO.NET. Therefore the connections are already pooled. Not only in the web environment.

http://www.ondotnet.com/pub/a/dotnet/2004/02/09/connpool.html

like image 143
Gant Avatar answered Sep 18 '22 09:09

Gant


It is my understanding that in a web environment, connections are pooled automatically. It is also my understanding that in a Windows app, this is not the case.

No, this is wrong, as m3rLinEz pointed out. Connections are always pooled.

Therefore, for a Windows app, the same connection should be used and not closed after each call, but instead closed when the app shuts down.

You could keep a connection open for the duration of the application in a monolithic WinForms app. But it's better to use the standard pattern of opening/closing connections whenever you need them. Connection pooling means you won't notice a performance difference. And your data access code will be compatible with server applications such as ASP.NET.

If it is, can two threads use the same connection to get a dataset from the DB at the same time or is that functionality queued up?

No. The ADO.NET classes (connection, command etc) are not thread-safe and should not be shared between threads without synchronisation. But as noted above, you should prefer the standard pattern for data access.

like image 28
Joe Avatar answered Sep 21 '22 09:09

Joe