读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数据库的速度吗?
...全文
602 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上,第一的时候有初始化动作。
你可以直接连数据库测试,第一次应该不慢。
内容概要:本文档聚焦于通信系统中的调制解调技术与Turbo码的结合应用,系统研究了GMSK调制的二比特差分解调方法,以及Turbo码分别与BPSK、GMSK调制方式联合使用的系统性能。通过Matlab平台实现了完整的通信链路仿真,涵盖信号调制、信道编码、解调解码及误码率分析等关键环节,深入探讨了不同调制体制下Turbo编码系统的抗干扰能力与频谱效率表现。研究不仅提供了算法实现代码,还包含了详细的性能对比分析,有助于理解现代数字通信中高效编码调制技术的设计原理与工程实现。此外,文档附带多个相关科研方向的仿真案例,展现出广泛的技术延展性与实际应用价值。; 适合人群:具备通信原理、数字信号处理等相关基础知识,熟悉Matlab编程环境,正在从事无线通信系统仿真、信道编码理论研究或相关领域科研工作的研究生、高校教师及工程技术研究人员。; 使用场景及目标:①深入掌握GMSK调制与Turbo码相结合的技术机制,理解其在提高通信可靠性与频谱利用率方面的优势;②熟练运用Matlab构建完整的数字通信仿真系统,完成从调制编码到解调译码的全流程建模与性能评估;③为无人机通信、卫星通信、移动通信等实际应用场景下的高可靠传输系统设计提供理论支持与算法参考。; 阅建议:建议结合所提供的Matlab代码逐模块运行与调试,重点关注GMSK差分解调过程与Turbo译码的迭代收敛特性,同时可参考文档中列出的其他研究课题拓展仿真范围,提升综合科研与工程实践能力。

111,129

社区成员

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

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

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