我当前项目的主要要求是每天接收、解析和存储数百万条无线电消息。这意味着每秒处理许多消息。目前,存储已解析消息的方法对每个单独的消息使用简单的 aSqlCommand
和ExecuteNonQuery
。
看到每个项目都包含多个TcpClient
s 在单独的线程上读取,因此将执行以下块的许多并发实例:
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 小时的持久连接,因此永远不会关闭数据库连接。
所以我的问题是,我目前的方法有多合理?我应该为每条消息关闭和打开连接吗?还是继续使用通过引用共享和传递的全局数据库连接?