当前位置: 首页 > news >正文

SQLite批量操作优化方案

image

using SQLiteBatch.Util;
using System.Collections.Concurrent;namespace SQLiteBatch
{internal class Program{static ConcurrentQueue<string> SqlQueue = new ConcurrentQueue<string>();static int ExecuteCount = 10000;static void Main(string[] args){// 初始化
            FreeSqlUtil.InitDB();// 单条执行Task.Run(() => TaskOne());// 批量添加执行Task.Run(() => TaskAdd());Task.Run(() => TaskUpdate());Console.ReadLine();}static async Task TaskOne(){var executeStopwatch = System.Diagnostics.Stopwatch.StartNew();for (int i = 0; i < ExecuteCount; i++){await FreeSqlUtil.UpdateChannel_One("Channel1.Device1.400101", i.ToString(), "Good", DateTime.Now.ToString()); }executeStopwatch.Stop(); Console.WriteLine($"单条执行, {ExecuteCount} 条 SQL, 总耗时: {executeStopwatch.ElapsedMilliseconds} ms");}static async Task TaskAdd(){for (int i = 0; i < ExecuteCount; i++){ var sql = FreeSqlUtil.UpdateChannel_Much("Channel1.Device1.400101", i.ToString(), "Good", DateTime.Now.ToString());SqlQueue.Enqueue(sql);}}static async Task TaskUpdate(){ while (true){await Task.Delay(10000);// 批量取出并执行SQLvar batchSqls = new List<string>();while (SqlQueue.TryDequeue(out string? sql)) batchSqls.Add(sql);if (batchSqls.Count > 0){var executeStopwatch = System.Diagnostics.Stopwatch.StartNew();await FreeSqlUtil.ExecuteBatchAsync(batchSqls);executeStopwatch.Stop(); Console.WriteLine($"批量执行, {batchSqls.Count} 条 SQL, 总耗时: {executeStopwatch.ElapsedMilliseconds} ms");} }}}
}
using System.Data.Common;namespace SQLiteBatch.Util
{public class FreeSqlUtil{static IFreeSql freeSql;public static void InitDB(){var ConnectionString = $"Data source={AppDomain.CurrentDomain.SetupInformation.ApplicationBase}{Path.DirectorySeparatorChar}Data.db";freeSql = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.Sqlite, ConnectionString).UseNoneCommandParameter(true)// 不使用参数化
                        .Build();}public static async Task<bool> UpdateChannel_One(string tag, string value, string quality, string timestamp){bool ret = false;try{ret = await freeSql.Update<Channel>().Set(it => it.OPCValue == value).Set(it => it.OPCQuality == quality).Set(it => it.OPCTime == timestamp).Where(it => it.OPCTag == tag).ExecuteAffrowsAsync() > 0;}catch (Exception ex){Console.WriteLine($"FreeSqlHelper,UpdateChannel,errmsg:{ex.Message}\r\nstacktrace:{ex.StackTrace}");}return ret;}public static string UpdateChannel_Much(string tag, string value, string quality, string timestamp){return freeSql.Update<Channel>().Set(it => it.OPCValue == value).Set(it => it.OPCQuality == quality).Set(it => it.OPCTime == timestamp).Where(it => it.OPCTag == tag).ToSql();}// 批量执行方法public static async Task ExecuteBatchAsync(List<string> lstBathSql){ using (FreeSql.Internal.ObjectPool.Object<DbConnection> conn = freeSql.Ado.MasterPool.Get()){try{using (DbTransaction transaction = conn.Value.BeginTransaction()){try{for (int i = 0; i< lstBathSql.Count; i++){ try{ await freeSql.Ado.ExecuteNonQueryAsync(transaction, lstBathSql[i]); }catch (Exception ex){ Console.WriteLine($"ExecuteBatchAsync Error(1),ex:{ex.Message},sql:{lstBathSql[i]}");}}transaction.Commit();}catch (Exception ex){transaction.Rollback();Console.WriteLine($"ExecuteBatchAsync Error(2),ex:{ex.Message}");}}}catch (Exception ex){Console.WriteLine($"ExecuteBatchAsync Error(3),ex:{ex.Message}");}}}}
}

 

http://www.gsyq.cn/news/21562.html

相关文章:

  • AI元人文:元规则、元道德与哪吒模型
  • 知音 CMS:全场景音频与小说分销一体化解决方案
  • 2025 年国内云计算公司最新推荐排行榜:聚焦 AI 训推与大模型需求的优质厂商精选指南模型训推云计算/大模型云计算/AI开发云计算公司推荐
  • 2025年防水连接器厂家最新推荐排行榜,连接器,航空插头,工业网线,专业防水与耐用性能深度解析
  • 2025年液压阀块厂家最新推荐排行榜,液压阀块加工,阀块零件机加工,液压阀加工,各种液压阀块专业制造商精选
  • 2025年干燥设备厂家最新权威推荐榜:小型喷雾/实验室离心喷雾/双锥回转真空/搪瓷双锥/旋转闪蒸/振动流化床/真空耙式/单层带式/多层带式/立式沸腾/卧式沸腾/滚筒刮板干燥机
  • 如何实现cmd可以访问conda但不能通过默认环境访问python
  • 2025 年无氧烘箱厂家推荐榜:洁净/高真空/HMDS/真空无氧烘箱/聚焦环保节能与洁净需求,这家企业成行业优选
  • 2025年超市选择攻略:揭秘合肥砂之船的卓越购物体验
  • OFGB 广告屏蔽工具!优化工具!一款专门为 Windows 11 系统设计的开源广告屏蔽工具
  • 通过springboot编写的医院管理系统
  • LGP11993 [JOIST 2025] 迁移计划 学习笔记
  • 线程的状态对比:等待、驻留、监视
  • 2025年法兰保护罩厂家最新推荐排行榜:管道法兰保护罩,设备法兰保护罩,耐腐蚀法兰保护罩,定制法兰保护罩公司推荐
  • 128.最长连续序列
  • 大数据分析之MySQL学习1
  • 2025年GEO(AI搜索优化)源头厂家Top10权威推荐榜
  • 深度解读:2025中国太阳能板TOP10榜单背后的格局颠覆与逻辑
  • kv cache缓存
  • 2025年上海律师服务最新权威推荐榜:经侦律师,民事/刑事律师,经济/婚姻律师,法务律师,负债律师事务所专业解析
  • 深入理解 `itertools`:分类解析常用函数 (Effective Python 第36条) - 教程
  • assert的基本用法
  • 1688代发铺货规格匹配设置
  • task2
  • 2025年机械加工厂家最新权威推荐榜:钣金/焊接/零件/非标自动化/精密金属加工,专业定制与技术创新实力解析
  • 2025年10月15号随笔
  • Ubuntu20.04安装NVIDIA显卡驱动、CUDA Toolkit、cuDNN步骤(二) - 指南
  • 2025年冲压件厂家最新权威推荐榜:新能源/光伏/精密/异形/五金/铝/汽配/不锈钢/家具冲压件源头厂商深度解析
  • 微信群机器人接口
  • logging模块用法