首页 新闻 会员 周边

c# sqlite 查询效率的问题

-2
悬赏园豆:50 [已关闭问题] 关闭于 2015-04-29 12:00

用Sqlite Expert查询的时候,查询时间为:72ms,但是c#查询需要差不多2秒多!

 

查询语句如下:

public static DataSet Query(string SQLString)
        {
            using (SQLiteConnection connection = new SQLiteConnection(connectionString))
            {
                DataSet ds = new DataSet();
                try
                {
                    connection.Open();
                    SQLiteDataAdapter command = new SQLiteDataAdapter(SQLString, connection);
                    command.Fill(ds, "ds");
                }
                catch (System.Data.SQLite.SQLiteException ex)
                {
                    throw new Exception(ex.Message);
                }
                return ds;
            }
        }

 

查询时间调试:

Stopwatch st = new Stopwatch();
            st.Start();
            BLL.TestPaperDetail bll = new BLL.TestPaperDetail();
            DataSet ds = bll.GetTestPaperDis("TestPaperID=" + TestPaperID, Columns, "QuesType,Difficulty");
            st.Stop();

MessageBox.Show(st.Elapsed.ToString());

 

这个时候调试差不多2秒多;

 

但是把sql语句直接在sqlite Expert里面执行,只要70多毫秒!

 

求解!~!!!!

陈啊M的主页 陈啊M | 初学一级 | 园豆:156
提问于:2015-04-28 16:53
< >
分享
所有回答(5)
0

你的测时范围过大了,在 command.Fill()函数的开始和结束之间也放一个Stopwatch试试。

天方 | 园豆:5407 (大侠五级) | 2015-04-28 17:00

测试过了,也差不多!数量级上没有什么变化!

支持(0) 反对(0) 陈啊M | 园豆:156 (初学一级) | 2015-04-28 17:05

测试糟点太多了,

1、一个包含了建立连接的时间,一个不包含。

2、数据行是多少不清楚,有可能建立连接的时间已经远远大于取数据的时间。

3、中了PETSHOP N层的毒,包装里面有问题的代码还不知道有多少。

4、也许还是Debug模式下的时间,而不是Release模式下的时间,不过这个已经不重要了。

有了上面这三个已经完全致命了。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2015-04-28 17:33
0
BLL.TestPaperDetail bll = new BLL.TestPaperDetail();
DataSet ds = bll.GetTestPaperDis("TestPaperID=" + TestPaperID, Columns, "QuesType,Difficulty");

这些是什么鬼?

你自己包装一堆乱七八糟的类,性能极差,然后怪ADO.NET?

ADO.NET无辜: “这怪我咯?!”

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-04-28 17:04

多层架构懂不?

支持(0) 反对(0) 陈啊M | 园豆:156 (初学一级) | 2015-04-28 17:13

@陈啊M: 哈哈,不懂。啥是多层架构?

支持(0) 反对(0) 爱编程的大叔 | 园豆:30839 (高人七级) | 2015-04-28 17:15

@陈啊M: 和大叔谈多层架构?-_-|||还是看看你的DAL层的逻辑吧,估计时间耗在那里了

支持(0) 反对(0) nicky0227 | 园豆:1069 (小虾三级) | 2015-04-28 17:24

@陈啊M: 二货

支持(0) 反对(0) +小马哥++ | 园豆:906 (小虾三级) | 2015-04-29 11:37
0

用 SQLiteCommand 和 SQLiteDataReader 测试下,然后不要去填充 DataSet,使用 List<T>。

Launcher | 园豆:45045 (高人七级) | 2015-04-28 17:11
0

阁下是不是来吐槽ADO.NET性能极差的?

问天何必 | 园豆:3311 (老鸟四级) | 2015-04-28 19:34
0

你贴出来的代码没有连续性哈。。既然要测试性能,那么就对每一句代码来打印执行时间。。

幻天芒 | 园豆:37175 (高人七级) | 2015-04-28 22:19
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册