c# socket 大数据_c# socket timer 多线程 大数据量解决思路

本文讨论了一个C#客户端在处理大量设备数据上传时遇到的问题,即随着设备数量增长,数据发送的确认率下降。问题可能源于数据阻塞或Socket处理方式。解决方案包括采用多线程并发处理数据,增加超时时间,以及考虑服务端的处理能力。提出了将数据分块并使用多个线程同时发送的思路,但强调了若服务器处理能力有限,多线程可能无效,还建议检查网络连接和端口设置。
摘要由CSDN通过智能技术生成

c# socket timer 多线程 大数据量

问题:现有一个客户端程序主要接设备上传上来的数据,大约有2000台,每天数据量在百万级,客户端组织好设备上传的数据后,通过SOCKet发送到服务器,服务器是由另一个公司来做,刚开始设备不到100台时,数据发送很稳定,每条都能给我回复,而且速度控制在每秒八条左右,现在差不多300台,每天12万左右的数据,出现三分之二不能回复的数据,这样需要下次再发送,久而久之,出现数据滞留,这些代码放在一个TIMER控件里,现在设为1个小时循环一次,实际情况,一个小时运行不好这个循环,有没有更好的方案?

主要代码如下

try

{

CS = new CSocket(serverSocket);

string sql = "select lsh, swaprec  from t_collalldatatemp t where state='0' ";

DataTable DtPos = OracleHelper.ExecuteDataTable(OracleHelper.ConnectionString, sql);

NumPos = Convert.ToInt32(DtPos.Rows.Count);

if (NumPos > 0)

{

lvResult.Items.Insert(0, AddListViewItem("客户端", txtJMJIPAddress.Text + ":" + txtJMJPort.Text, "开始上传消费数据..."));

if (CS.Open(serverIp, Convert.ToInt16(port)) == "0")

{

qcount = 0;

for (Int32 iSWAPREC = 0; iSWAPREC 

{

CS.AcceptStr = null;

SendTotal = string.Empty;

SendLX = "8030";

SendMsg = "00000003" + GetXzDataSocket(DtPos.Rows[iSWAPREC]["swaprec"].ToString());

byte[] textBuffer = System.Text.Encoding.Default.GetBytes(SendMsg);

SendTotal = SendLX + SendMsg + CRC16(textBuffer);

CS.Send(SendTotal);

//count = 0;

while (true)

{

Thread.Sleep(100);

AceeMsg = CS.AcceptStr;

if (AceeMsg != null)

{

if (AceeMsg.Substri

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值