Tôi đã tìm thấy ở đó có rất ít thông tin về chủ đề này, hy vọng ai đó có thể hướng dẫn tôi một số thông tin và mã mẫu có thể.Chia sẻ kết nối db giữa các luồng trong ứng dụng C#?
Trả lời
Tôi sẽ nói không chia sẻ đối tượng kết nối chính nó, chỉ cần tạo một kết nối mới và để ADO.net xử lý kết nối tổng hợp.
Tôi có xu hướng đồng ý, Máy chủ cơ sở dữ liệu được thiết kế để quản lý kết nối tổng hợp, tốt nhất là để cho máy chủ DB được thiết kế để làm. –
Nói chung các kết nối không phải là chủ đề an toàn (SqlConnection, MySqlConnection và OracleConnection đặc biệt đề cập rằng chúng không phải là luồng an toàn).
Không chia sẻ kết nối giữa các chuỗi.
Không có mã mẫu trong tự nhiên vì (gần như) không ai làm điều đó bởi vì nó là một ý tưởng rất, rất, xấu.
Để đáp ứng với các thông số thực tế của câu hỏi, chứ không phải sa thải họ, tôi sẽ quấn DbCommand
để giúp đồng bộ hóa truy cập vào các kết nối (khi và chỉ khi bạn hoàn toàn phải).
public class SyncedDbCommand : DbCommand
{
private DbCommand _cmd;
private object _sync;
public SyncedDbCommand(DbCommand cmd, object sync)
{
_cmd = cmd;
_sync = sync;
}
// omitted basic proxy method overrides
protected override DbDataReader ExecuteDbDataReader(CommandBehavior behavior)
{
Monitor.Enter(_sync);
return _cmd.ExecuteReader();
}
public override int ExecuteNonQuery()
{
Monitor.Enter(_sync);
return _cmd.ExecuteNonQuery();
}
public override object ExecuteScalar()
{
Monitor.Enter(_sync);
return _cmd.ExecuteScalar();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
Monitor.Exit(_sync);
}
base.Dispose(disposing);
}
}
Để sử dụng mẫu, bạn phải nhanh chóng nó với một thực tế DbCommand
cũng như một số trường hợp đối tượng được chia sẻ trên tất cả các tập quán của một kết nối. Trong việc sử dụng đơn giản nhất, bạn thậm chí có thể vượt qua đối tượng kết nối chính nó như là đối tượng khóa. Việc diễn giải phải xảy ra trong tuyên bố using
. Điều này không cho phép bạn biết chính xác yêu cầu sử dụng của bạn là gì và cách hoạt động của lớp Monitor
và khóa.
Cách này hay cách khác, bạn muốn đồng bộ hóa việc sử dụng kết nối giữa các chủ đề và trên đây là một cách tiếp cận để làm như vậy.
Tuyệt đối KHÔNG làm điều này, không có lý do chính đáng để làm như vậy và bạn sẽ ảnh hưởng đến hiệu suất của ứng dụng của bạn. Sử dụng kết nối tổng hợp như trạng thái câu trả lời ở trên. –
"Không có lý do chính đáng"? Không biết kiến trúc mã của mình, làm thế nào bạn có thể tuyên bố điều đó? Đối với việc chia sẻ kết nối, đó là một phương pháp nổi tiếng để cho phép các giao dịch mà không cần quảng bá cho MSDTC. Đây là một lợi ích hiệu suất rất lớn. Tuy nhiên, bắt đầu từ đầu, tất nhiên tôi sẽ không tư vấn cho phương pháp được mô tả trong câu trả lời của tôi. Nhưng trong * tôn trọng người hỏi và trả lời những câu hỏi cụ thể của anh ấy *, đây là lời khuyên của tôi. –
Vẫn đang chờ để được chứng ngộ ... –
- 1. pgAdmin - Chia sẻ các Định nghĩa Kết nối DB
- 2. Chia sẻ kết nối XMPP giữa nhân viên Celery
- 3. Chia sẻ các mô hình giữa các ứng dụng Django
- 4. Tài nguyên nào được chia sẻ giữa các luồng?
- 5. Biến tĩnh có được chia sẻ giữa các luồng không?
- 6. Chia sẻ dữ liệu giữa các ứng dụng trên iDevice
- 7. Cách chia sẻ đối tượng giữa các ứng dụng java?
- 8. Cài đặt chia sẻ giữa các ứng dụng
- 9. Chia sẻ bảo mật giữa các ứng dụng web
- 10. Cách chia sẻ dữ liệu giữa các luồng khác nhau Trong C# bằng AOP?
- 11. biến chia sẻ giữa hai luồng hoạt động khác với thuộc tính được chia sẻ
- 12. Chia sẻ URL trong ứng dụng web
- 13. Cách chia sẻ logic nghiệp vụ giữa nhiều ứng dụng
- 14. Chia sẻ phiên giữa webservice và ứng dụng asp.net
- 15. Làm thế nào để chia sẻ kết nối mysql giữa goroutines http?
- 16. Chia sẻ dữ liệu giữa các liên kết người dùng
- 17. Berkeley DB trong các ứng dụng đa luồng
- 18. Khởi chạy ứng dụng đã cài đặt trên iPhone được chia sẻ kết nối
- 19. Chia sẻ biến giữa các quá trình
- 20. Phát triển ứng dụng chia sẻ kết nối iPhone riêng tư
- 21. Threadpool có được chia sẻ giữa các miền ứng dụng không?
- 22. Tạo một Dịch vụ để chia sẻ kết nối cơ sở dữ liệu giữa tất cả các hoạt động trong ứng dụng Android?
- 23. C++ kết nối luồng đầu ra với luồng đầu vào
- 24. Truy cập các tệp từ chia sẻ mạng trong ứng dụng web C#
- 25. Ứng dụng Chia sẻ/SMB mạng
- 26. Phát hiện chia sẻ kết nối qua USB trên android
- 27. Cách chia sẻ cùng một biến giữa các mô-đun?
- 28. Một số nguyên có thể được chia sẻ giữa các luồng một cách an toàn không?
- 29. Đơn giản C# Ứng dụng chia sẻ màn hình
- 30. Chia sẻ phiên giữa hai miền
Tôi đoán điều này cũng khác với cơ sở dữ liệu cho nhà cung cấp cơ sở dữ liệu ... mysql, sql, sqlite ... – tuinstoel