gpt4 book ai didi

c# - 存储恒定数据流的最佳实践

转载 作者:太空狗 更新时间:2023-10-29 21:39:50 24 4
gpt4 key购买 nike

我当前项目的主要要求是每天接收、解析和存储数百万条 radio 消息。这意味着每秒处理许多消息。目前,存储已解析消息的方法对每条消息使用简单的 SqlCommandExecuteNonQuery

鉴于每个项目都由多个 TcpClient 组成,在不同的线程中读取,因此将执行以下 block 的许多并发实例:

query.Append(string.Format("INSERT INTO {0} ({1}) VALUES ({2})", this._TABLE_, col, val));
sqlCmd = new SqlCommand(query.ToString(), sql);
sqlCmd.ExecuteNonQuery();

我知道另一种方法可能是缓存已解析的消息并在预定时间执行批量插入。

使用 Entity Framework 是一种选择,但对于简单的要求来说可能有点矫枉过正。

该程序每天 24 小时都需要持久连接,因此永远不会关闭数据库连接。

所以我的问题是,我目前的做法有多合理?我应该为每条消息关闭和打开连接吗?还是继续使用通过引用共享和传递的全局数据库连接?

最佳答案

您为什么使用 Sql Server 作为您的数据存储?我不是说这个修辞。我的意思是,插入后查询数据有什么要求?是否会对现有数据进行更新?删除?在不久的将来是否有针对此数据的标准化表格?

这些答案将告知您当前方法的合理性。

The program requires a persistent connection 24 hours per day and therefore never closes the db connection.

无论如何,您都应该在代码中打开和关闭数据库连接。 ADO.NET 汇集连接,因此您不必手动保持连接打开:

using (SqlConnection sql = new SqlConnection("...")) {
query.Append(string.Format("INSERT INTO {0} ({1}) VALUES ({2})", this._TABLE_, col, val));
using (SqlCommand sqlCmd = new SqlCommand(query.ToString(), sql) {
sql.Open();
sqlCmd.ExecuteNonQuery();
}
}

关于c# - 存储恒定数据流的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18534375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com