首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Linq to SQL与序列化

Linq to SQL与序列化
EN

Stack Overflow用户
提问于 2009-04-28 12:33:24
回答 4查看 883关注 0票数 2

假设我在MSSQL数据库中有几个表,每个表大约有5-10个属性。表之间有一些简单的关联,但每个表都有500,000到1,000,000行。

有一个算法对这些数据(所有数据)运行,所以在运行算法之前,我必须从数据库中检索所有数据。算法不会改变数据,只是读取数据,所以我只需要检索数据。

我正在使用LINQ to SQL。检索所有数据大约需要两分钟。我想知道的是,序列化到文件,然后反序列化(在需要的时候)是否真的会更快地加载数据。

数据大约200MB,我不介意将其保存到磁盘。那么,如果对象是从文件反序列化的,还是使用LINQ2SQL DataContext反序列化的,速度会更快吗?

有这方面的经验吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-04-28 13:00:59

我认为LINQtoSQL可能不是这类应用程序的最佳选择。当您谈到这么多对象时,您会产生相当多的创建对象实例(持久化类)的开销。

我会选择一种解决方案,存储过程通过ADO.NET仅检索必要的数据,应用程序将其存储在内存中(内存现在很便宜,200MB应该不是问题),分析算法对内存中的数据运行。

我不认为你应该把数据存储在文件里。最后,您的数据库也只是一个或多个由数据库引擎读取的文件。所以你要么

  • 让数据库引擎读取您的数据并对其进行分析,或者
  • 让数据库引擎读取您的数据,您将其写入文件,然后读取文件(再次读取相同的数据,但现在您自己进行读取),然后分析data

据我所知,后一种选择涉及大量开销,没有任何优势。

编辑:如果您的数据很少更改,您可以考虑在分析和缓存预处理数据之前对数据进行预处理(在数据库或文件系统中)。这只有在预处理数据的分析速度比原始数据快(很多)的情况下才有意义。也许一些预处理可以在数据库本身中完成。

票数 2
EN

Stack Overflow用户

发布于 2009-04-28 12:51:32

您应该尝试在不使用LINQ to SQL层的情况下直接使用ADO.NET,即使用SqlDataReader读取数据。

如果您按顺序处理数据,则可以在需要时从读取器获取记录,而不必先将它们全部读取到内存中。

票数 2
EN

Stack Overflow用户

发布于 2009-04-28 13:03:34

如果您有一个对数据库中的大多数数据进行操作的进程...那么这听起来就像是存储过程的作业。它不会是面向对象的,但它会快得多,也不会那么脆弱。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/797662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档