gpt4 book ai didi

mysql - 如何提高 C# 中 MySQL 存储过程调用的速度

转载 作者:行者123 更新时间:2023-11-29 14:00:50 24 4
gpt4 key购买 nike

我正在尝试收集数据流(每秒 100-150 个数据包),然后使用存储过程将处理后的数据包发送到 MySQL 数据库:

comm = new MySqlCommand("cantm_insert", conn);
comm.CommandType = CommandType.StoredProcedure;

comm.Parameters.AddWithValue("?_tmsid", tmsid);
comm.Parameters.AddWithValue("?_time", DateTime.Now.ToOADate());
comm.Parameters.AddWithValue("?_dest", c.Identifier >> 3);
comm.Parameters.AddWithValue("?_source", c[0]);
comm.Parameters.AddWithValue("?_length", c.DataLength);
comm.Parameters.AddWithValue("?_type", c[1]);
comm.Parameters.AddWithValue("?_data", buffer);

comm.executeNonQuery();

此方法每秒仅提供 15-20 个数据包存储在数据库中。我需要尽快将数据存储到数据库中。

在 MSSQL 中,我可以发送一大堆文本命令(例如“select * from tbl;insert into tbl;delete from tbl;”),但我不知道如何使用存储过程提高性能。

最佳答案

您可以通过重用命令和参数对象来提高代码的性能。当您获取新数据点时,只需为参数对象设置值即可。所有的资源分配都会损害代码的性能。不知道你的存储过程在做什么,所以无法提供帮助。

在数据库端,删除索引。您可以实现一个数据收集表,该表在开始测试之前被截断。测试后将数据移动到其“真实”表。

您提到数据流的速度为 150-200 数据包/秒。这是平均数据还是连续数据?因为如果数据包突发,您可以使用一个线程进行数据收集,使用第二个线程进行数据库存储,并在它们之间使用缓冲区/队列。验证缓冲区在下一个数据突发之前得到处理。这样您就不会丢失数据。

关于mysql - 如何提高 C# 中 MySQL 存储过程调用的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15089932/

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