读sqlite 速度慢的问题

ayun00 2012-08-17 09:43:11
我的环境 vs2010 + sqlite.net + ef4.3 + dbcontext generator


我在程序中第一次调用数据库,不管是增改删查 都很慢(要等1-2秒), 然后的数据库操作 速度就很正常了

我找了很久 发现
http://www.cnblogs.com/osiris/articles/2013622.html

这篇文章说是
“如果你为了图省事不想建立SQLiteConnection,直接建立DataContext”的原因

如是我修改了 DbContext的创建 代码如下

1.修改一
C# code
public partial class CodeLibraryEntities : DbContext
{

private static DbCompiledModel GetDbCompiledModel()
{
string connstr = ConfigurationManager.ConnectionStrings["CodeLibraryEntities"].ConnectionString;

connstr = connstr.Remove(0, connstr.IndexOf("provider connection string=\"") + "provider connection string=\"".Length );
connstr = connstr.Remove(connstr.IndexOf("\""));

DbModelBuilder modelBuilder = new DbModelBuilder();
var conn = new System.Data.SQLite.SQLiteConnection(connstr);
DbModel model = modelBuilder.Build(conn);
return model.Compile();

}

public CodeLibraryEntities()
: base("Name=CodeLibraryEntities", GetDbCompiledModel())
{

}

。。。。。。。。。。。。。。。。。
}





“System.InvalidOperationException: Cannot initialize a DbContext from an entity connection string or an EntityConnection instance together with a DbCompiledModel. If an entity connection string or EntityConnection instance is used, then the model will be created from the metadata in the connection. If a DbCompiledModel is used, then the connection supplied should be a standard database connection (for example, a SqlConnection instance) rather than an entity connection.” 错误


2.修改二
C# code
public partial class CodeLibraryEntities : DbContext
{
public static System.Data.SQLite.SQLiteConnection GetSQLiteConnection()
{
string connstr = ConfigurationManager.ConnectionStrings["CodeLibraryEntities"].ConnectionString;

connstr = connstr.Remove(0, connstr.IndexOf("provider connection string=\"") + "provider connection string=\"".Length);
connstr = connstr.Remove(connstr.IndexOf("\""));

return new System.Data.SQLite.SQLiteConnection(connstr);

}
public CodeLibraryEntities()
: base(GetSQLiteConnection(), true)
{

}
。。。。。。。。。。。。。。。。。。。。。。。

}






报错
"System.Data.Entity.Infrastructure.UnintentionalCodeFirstException: Code generated using the T4 templates for Database First and Model First development may not work correctly if used in Code First mode. To continue using Database First or Model First ensure that the Entity Framework connection string is specified in the config file of executing application. To use these classes, that were generated from Database First or Model First, with Code First add any additional configuration using attributes or the DbModelBuilder API and then remove the code that throws this exception."

问题1. 我应该怎么改动

问题2. 这样的改动能提高操作sqlite数据库的速度吗?
...全文
517 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
代码誊写工 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

没有用过ef,我都是直接自己做一个业务类,然后通过DataReader读进来,需要回填的时候用ExcuteNoQuery写回去,觉得很快啊。
[/Quote]
顺便说一下,SQLite用来存储我们的生产数据配置索引的缓存(主数据的放在一个庞大的分布数据库里),即使是这样我们SQLite的数据量可都是百万条以上更新删除和插入,可确实不慢啊,你说的1-2秒钟的现象没有出现过。
  • 打赏
  • 举报
回复
没有用EF,单纯SQL语句感觉Sqlite很快
代码誊写工 2012-08-20
  • 打赏
  • 举报
回复
没有用过ef,我都是直接自己做一个业务类,然后通过DataReader读进来,需要回填的时候用ExcuteNoQuery写回去,觉得很快啊。
ayun00 2012-08-20
  • 打赏
  • 举报
回复
。。。。。 就没人教教我怎么优化 ef 的初始化吗?
代码誊写工 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
sqlite 你就别指望能快到哪里去

本来就是一个轻量级的数据库
[/Quote]
SQLite其实很快,比很多数据库快(单机时Oracle、DB2、Informix、SqlServer甚至MySQL都不一能快过它),就是因为它比较轻量。
anbin0814 2012-08-20
  • 打赏
  • 举报
回复
ef初始化本来就慢,还指望sqlite快?
ayun00 2012-08-20
  • 打赏
  • 举报
回复
有人吗
ayun00 2012-08-20
  • 打赏
  • 举报
回复
就是不用对底层数据结构更了解,更多地去面向业务逻辑。

这就是我想要的

[Quote=引用 12 楼 的回复:]

引用 11 楼 的回复:

都没有看到我说的环境是ef + sqlite。net吗?

我一直问的是怎么样优化 初始化

引用 10 楼 的回复:

引用 8 楼 的回复:

没有用过ef,我都是直接自己做一个业务类,然后通过DataReader读进来,需要回填的时候用ExcuteNoQuery写回去,觉得很快啊。

顺便说一下,SQLite用来存储我们的生产数据配……
[/Quote]
代码誊写工 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

都没有看到我说的环境是ef + sqlite。net吗?

我一直问的是怎么样优化 初始化

引用 10 楼 的回复:

引用 8 楼 的回复:

没有用过ef,我都是直接自己做一个业务类,然后通过DataReader读进来,需要回填的时候用ExcuteNoQuery写回去,觉得很快啊。

顺便说一下,SQLite用来存储我们的生产数据配置索引的缓存(主数据的放在一个庞大……
[/Quote]
为什么非要在这棵树上吊死呢?外部接口规范还是开发团队规范?
都说了用ef初始化慢,没有用过不代表不知道怎么用,只是没有确定的测试过,所以不好说是否有效,但看到很多地方对ef的诟病,所以才没有再去测了,ef又不是一个完美的架构。
当然,作为快速开发来说,它有好处,就是不用对底层数据结构更了解,更多地去面向业务逻辑。(也不知道算不算好处,就好像很多小盆友说“不知道学好算法有屁用”,你能咋办呐)
ayun00 2012-08-20
  • 打赏
  • 举报
回复
都没有看到我说的环境是ef + sqlite。net吗?

我一直问的是怎么样优化 初始化

[Quote=引用 10 楼 的回复:]

引用 8 楼 的回复:

没有用过ef,我都是直接自己做一个业务类,然后通过DataReader读进来,需要回填的时候用ExcuteNoQuery写回去,觉得很快啊。

顺便说一下,SQLite用来存储我们的生产数据配置索引的缓存(主数据的放在一个庞大的分布数据库里),即使是这样我们SQLite的数据量可都是百万条以上更新删除和插入,可确实不慢啊,你说的1-2秒钟的现象没有出现过。
[/Quote]
ayun00 2012-08-17
  • 打赏
  • 举报
回复
是的 ,我改的部分也是orm 的初始化部分

[Quote=引用 1 楼 的回复:]

这个应该跟数据库无关,主要慢在ORM上,第一的时候有初始化动作。
你可以直接连数据库测试,第一次应该不慢。
[/Quote]
ycproc 2012-08-17
  • 打赏
  • 举报
回复


sqlite 你就别指望能快到哪里去

本来就是一个轻量级的数据库
cheng2005 2012-08-17
  • 打赏
  • 举报
回复
这个应该跟数据库无关,主要慢在ORM上,第一的时候有初始化动作。
你可以直接连数据库测试,第一次应该不慢。

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧