C# 关于OPC数据处理相关代码优化处理

本文探讨了一个C# OPC数据处理项目中遇到的内存溢出问题,重点分析了数据库操作和OPC操作两方面的优化可能性。通过将数据库连接字符串设为全局变量、优化SQL查询以及理解close和dispose的差异,作者对代码进行了改进,目前程序已稳定运行30小时。然而,是否能长期避免内存溢出还需进一步观察。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Configuration;
using OPCAutomation;
using MySql.Data;
using MySql.Data.MySqlClient;
using System.Data;
using System.Threading;
using System.Threading.Tasks;

namespace tyDoorOpcSync
{
    class Program
    {
        static void Main(string[] args)
        {
            OPCServer opcServer = new OPCServer();
            OPCGroups opcGroups;
            OPCGroup opcGroup;
            OPCItems opcItems;
            OPCItem DoorDesc,DoorOnOff,DoorAlarm,ReaderDesc,ReaderCard;
            Object DoorDescValue, DoorOnOffValue, DoorAlarmValue, ReaderDescValue, ReaderCardValue;
            Object DoorDescQty, DoorOnOffQty, DoorAlarmQty, ReaderDescQty, ReaderCardQty;
            Object DoorDescTime, DoorOnOffTime, DoorAlarmTime, ReaderDescTime, ReaderCardTime;
            opcServer.Connect("************");
            Console.WriteLine(DateTime.Now.ToLocalTime().ToString() + ":OPC Server已经连接!");
            opcGroups = opcServer.OPCGroups;
            opcGroup = opcGroups.Add("tyDR");
            opcItems = opcGroup.OPCItems;          
            while (true)
            {
                string connStr = ConfigurationManager.AppSettings["ConnectionString"];
                MySqlConnection mycon = new MySqlConnection(connStr);
                mycon.Open();   
                string sql = "select * from *******";
                MySqlCommand cmd = new MySqlCommand(sql, mycon);
                MySqlDataReader reader = cmd.ExecuteReader();
                while (reader.Read())
                {
                    DoorDesc = opcGroup.OPCItems.AddItem(Convert.ToString(reader["#"]), 0);
                    DoorOnOff = opcGroup.OPCItems.AddItem(Convert.ToString(reader["#"]), 0);
                    DoorAlarm = opcGroup.OPCItems.AddItem(Convert.ToString(reader["#"]), 0);
                    ReaderDesc = opcGroup.OPCItems.AddItem(Convert.ToString(reader["#"]), 0);
             
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值