当前位置: 首页 > 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.jsqmd.com/news/14087/

相关文章:

  • 2025 年乡村波形护栏厂家最新推荐排行榜:聚焦优质企业,助力乡村道路安全建设选型参考道路/高速/乡村道路/乡村公路波形护栏板厂家推荐
  • 员工签到微信小程序系统:企业考勤管理的高效解决方案
  • AI 姓氏头像生成小程序管理系统:专属头像定制与流量变现解决方案
  • AI元人文:元规则、元道德与哪吒模型
  • 知音 CMS:全场景音频与小说分销一体化解决方案
  • 2025年锅炉厂家最新权威推荐榜:工业锅炉、燃气锅炉、电热锅炉、蒸汽锅炉专业制造商实力解析与选购指南
  • CCSP2025 游记
  • powershell上移文件夹下的所有文件
  • 2025 年国内算力云公司最新推荐排行榜:聚焦 AI 训推与 MaaS 服务,助力企业精准选优质合作伙伴算力云大模型/算力云深度学习/微调算力云/蓝耘算力云公司推荐
  • 2025 年国内云计算公司最新推荐排行榜:聚焦 AI 训推与大模型需求的优质厂商精选指南模型训推云计算/大模型云计算/AI开发云计算公司推荐
  • 2025年防水连接器厂家最新推荐排行榜,连接器,航空插头,工业网线,专业防水与耐用性能深度解析
  • 2025年清洗机厂家最新权威推荐榜:高压清洗机、工业清洗机、超声波清洗机源头厂家综合实力解析
  • 2025年微弧氧化厂家最新推荐排行榜,微弧氧化/铝合金微弧氧化/镁合金微弧氧化/黑色微弧氧化/钛合金微弧氧化/微弧氧化技术加工,渔具/雷达/医疗器械微弧氧化专业供应商
  • 2025 年永磁电机厂家最新推荐排行榜:聚焦高效节能电机品牌,助力采购者精准选优质产品直流/无刷/风机/节能/高效永磁电机厂家推荐
  • 2025年武汉防水公司最新权威推荐榜:商铺装修防水,别墅补漏防水,厂房防潮防水专业施工与长效保障口碑之选
  • Prometheus源码专题【左扬精讲】—— 监控系统 Prometheus 3.4.0 源码解析:recording rule
  • 2025年液压阀块厂家最新推荐排行榜,液压阀块加工,阀块零件机加工,液压阀加工,各种液压阀块专业制造商精选
  • 2025年干燥设备厂家最新权威推荐榜:小型喷雾/实验室离心喷雾/双锥回转真空/搪瓷双锥/旋转闪蒸/振动流化床/真空耙式/单层带式/多层带式/立式沸腾/卧式沸腾/滚筒刮板干燥机
  • 校准计算器
  • 2025 年国内冷却塔生产厂家最新推荐排行榜:聚焦节能优势与多行业适配性的优质企业精选工业/横流/逆流/全钢/圆型/方形冷却塔厂家推荐
  • 2025 冷水机组厂家最新推荐排行榜:聚焦节能技术与客户口碑,精选国产实力品牌解析
  • 如何实现cmd可以访问conda但不能通过默认环境访问python
  • Gephi 0.9.2超星系保姆级下载安装教程及配置教程(新手适用,附安装包下载)
  • Perforce:无法删除Stream Depot怎么处理
  • 2025 加工中心小程序最新推荐排行榜:涵盖五轴 / 卧式 / 立式机型,揭秘实力品牌核心优势
  • Perforce:Stream实战指南
  • 2025 年无氧烘箱厂家推荐榜:洁净/高真空/HMDS/真空无氧烘箱/聚焦环保节能与洁净需求,这家企业成行业优选
  • 2025年立式扒胎机厂家最新权威推荐榜:专业设备批发与高效服务口碑之选
  • Python基础入门:从环境搭建到基础运算
  • 植物大战僵尸杂交版下载安装教程:PC/安卓/iOS 全平台保姆级攻略【2025最新版】