zoukankan      html  css  js  c++  java
  • ASP.NET事务处理

    要想SQL CE里面插入数据,我就直接把数据插入进去:

    1        public static void InsertIntoSqlCe()
    2        {
    3            for (int i=0;i<Count;i++)
    4            {
    5                SqlCeHelper.ExecuteNonQuery(insertData);
    6            }

    7        }

    插入的数据是:


    1const string insertData = @"insert into TestTable ([key],[value]) values ('TestKey1','TestValue1') ";
    2const string insertDataWithTran = @"insert into TestTable ([key],[value]) values ('TestKey2','TestValue2')";

    老大喊程序慢,让优化一下.忽然间想起来以前看到一篇文章里面说,插入多条数据用事务的话会快很多.立马写代码试验:


     1        public static void InsertIntoSqlCeWithTran()
     2        {
     3            using(SqlCeConnection conn=new SqlCeConnection(SqlCeHelper.ConnString))
     4            {
     5                conn.Open();
     6                SqlCeTransaction tran = conn.BeginTransaction();
     7
     8                for (int i = 0; i < Count; i++)
     9                {
    10                    SqlCeHelper.ExecuteNonQuery(tran, insertDataWithTran);
    11                }

    12
    13                tran.Commit();
    14            }

    15        }

    一测试,立马发现效率大不一样:

    简单插入耗时:51422.969ms,大约50s,

    用事务插入:   915.7294ms,不到1s,有时候测试会略微多余1s的.

    可见用事务插入效率高很多,单次插入在锁上面的花费巨大...........

     闲暇之余,顺手测试了一下sqlite的效率:

    简单的插入:

    1        public static void InsertIntoSqlite()
    2        {
    3            for (int i = 0; i < Count;i++ )
    4            {
    5                SqliteHelper.ExecuteNonQuery(insertData);
    6            }

    7        }

    带有事务的插入:


     1        public static void InsertIntoSqliteWithTran()
     2        {
     3            using (SQLiteConnection conn = new SQLiteConnection(SqliteHelper.ConnString))
     4            {
     5                conn.Open();
     6                SQLiteTransaction tran = conn.BeginTransaction();
     7
     8                for (int i = 0; i < Count; i++)
     9                {
    10                    SqliteHelper.ExecuteNonQuery(tran, insertDataWithTran);
    11                }

    12
    13                tran.Commit();
    14            }

    15        }

    运行时间:

    简单插入:22952.6452ms,约21s到22s.

    事务插入:245.404ms(非常强悍啊).

     

    RT.没有最烂的程序员,只有更烂的程序员. 这两天写WM程序算是体会到了.

    PS: SQL CE不是一般的烂,现在极其不想用SQL CE了,版本众多,功能简单,部署困难....有机会的话用SQLite吧~~

    老久没写文章了,今天冒个泡

    PS:

    1.这次加上主键

    num Pk 自增,其他的不变,插入200条分别是47--55.7s和1.0--1.1s.

    Sqlite上面表也一样,插入200条数据分别是20--22s和270--310ms.

    2.关于Update

    通过主键update另外两个字段的值,update200次.

    Sql Ce 耗时为53850.4612--54642.9023ms和2103.0424--2188.6178ms.

    Sqlie耗时为 14469.8865--15233.3454ms和181.2472--244.342ms.

    注意,这些都为典型值,如果对性能有要求,可以多次测量估算平均值.
  • 相关阅读:
    修改科目的字段状态组-OBC4
    采购收货-对于物料,在工厂、库存地点中不存在物料主数据
    采购收货
    新建工厂
    采购订单收货提示,T169P表不存在
    维护工厂日历
    开始创建物料没有选择会计视图,需要怎么维护
    拓端数据tecdat|R语言分布滞后线性和非线性模型(DLMs和DLNMs)分析时间序列数据
    拓端数据tecdat|R语言分布滞后非线性模型(DLNM)研究发病率,死亡率和空气污染示例
    拓端数据tecdat|R语言中实现广义相加模型GAM和普通最小二乘(OLS)回归
  • 原文地址:https://www.cnblogs.com/longyi/p/1498390.html
Copyright © 2011-2022 走看看