数据加载

关于数据是否使用延迟加载,这里我不评判好或不好。主要还是要看自己系统的业务,

  • 若是显示指定要加载的关联数据,可以一次性奖所有需要数据全部取出,这样就能避免延迟加载而导致的与数据源进行多次交互带来的性能问题。
  • 若暂时不需要该数据,或是不确定是否需要改数据,可以使用延迟加载。当确定需要后在加载它。延迟加载是一种很重要的数据访问特性,可以有效地减少与数据源的交互。从而提升程序性能。

但是滥用延迟加载就可能会不但不能提升软件性能,反而会适得其反。

根据以上的两种情况,我们在底层方法抽象时就需要考虑,该使用哪种方式进行封装,那种方法支持延迟,哪些是全文索引。

下面我们就列举一个示例

Func<T, TResult>委托与
Expression<TDelegate>

这两个有什么区别,如何使用呢

以前写过一个对Func<T,Tresult>的介绍,是一个委托。这个就不多解释了

Expression<TDelegate>

类型参数

TDelegate

Expression<TDelegate>  表示的委托的类型。可以是Func<T,Tresult>

Expression<TDelegate>被称为表达式树。以表达式目录树的形式将强类型lambda 表达式表示为数据结构。 此类不能被继承。 <http://msdn.microsoft.com/zh-cn/library/system.linq.expressions(v=vs.110).aspx>

详解

Func<T,Tresult>本身就是一个委托。而 Expression<TDelegate>确是一个表达式,只有在编译之后才会变成委托。在底层使用中,到底如何区分呢。其实如果我们写成Func<T,Tresult>类型,作为参数传递给Where方法进行Linq查询时。将会产生全表查询,将整个数据库表中的数据加载到内存中。然后再到内存中根据where中的条件进一步查询。

而Expression<Func<t,bool>>只是查询出来你where条件中的数据,不用去进行全表查询。

所以我们将原先的

 IQueryable<T>LoadPageEntities<S>(int pageIndex, int pageSize, out int total,Func<T, bool> whereLambda,  boolisAsc, Func<T, S> orderByLambda);

修改为

IQueryable<T>LoadPageEntities<S>(int pageIndex, int pageSize, out int total,Expression<Func<T, bool>> whereLambda, bool isAsc,Expression<Func<T, S>> orderByLambda);

下面的代码示例演示如何将 lambda 表达式表示为委托形式的可执行代码和表达式目录树形式的数据

  // Lambda expressionas executable code.
    Func<int, bool> deleg = i => i< 5;
   // Invoke the delegate and display theoutput.
   Console.WriteLine("deleg(4) ={0}", deleg(4));
    // Lambda expression as data in the form ofan expression tree.
   System.Linq.Expressions.Expression<Func<int, bool>> expr = i=> i < 5;
   Console.WriteLine("expr(4) = {0}", expr (4));
   deleg(4) = True
   expr (4) = True

小结:

不正确的查询就会造成数据库全表查询,滥用延迟加载反而造成效率更慢。应该根据具体的业务情况综合只用。不可单独的说某一方好。

时间: 2024-10-12 09:22:03

数据加载的相关文章

Android5.1图库Gallery2代码分析数据加载流程

图片数据加载流程. Gallery---->GalleryActivity------>AlbumSetPage------->AlbumPage--------->PhotoPage 相册集                        照片集                 某张图片 1,AlbumSetPage.java private void initializeData(Bundle data) { String mediaPath = data.getString(A

实现虚拟模式的动态数据加载Windows窗体DataGridView控件 .net 4.5 (一)

实现虚拟模式的即时数据加载Windows窗体DataGridView控件 .net 4.5 原文地址 :http://msdn.microsoft.com/en-us/library/ms171624.aspx  译 Q:77811970 实现虚拟模式的原因之一 DataGridView控制只检索数据,因为它是必要的. 这就是所谓的 即时数据加载 . 如果你正在与一个非常大的表在一个远程数据库,例如,您可能希望避免启动延迟,只检索所需的数据显示和检索额外的数据只有当用户新行滚动到视图. 如果客户

JQuery插件:遮罩+数据加载中。。。(特点:遮你想遮,罩你想罩)

在很多项目中都会涉及到数据加载.数据加载有时可能会是2-3秒,为了给一个友好的提示,一般都会给一个[数据加载中...]的提示.今天就做了一个这样的提示框. 先去jQuery官网看看怎么写jQuery插件,然后就开始写了.写下来这么一个插件,稍作优化,就在项目中使用了.下面贴的是我写这个插件时的测试图: 这张图模拟数据加载前提示框的展示,这个表格是一个写在页面上的.蓝色的底纹就是遮罩层. (function($){ $.fn.extend({ /** * 打开遮罩,并显示一段文字. * @para

浅谈Entity Framework中的数据加载方式

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx,其中的一系列文

APP中数据加载的6种方式-b

我们看到的APP,往往有着华丽的启动界面,然后就是漫长的数据加载等待,甚至在无网络的时候,整个处于不可用状态.那么我们怎么处理好界面交互中的加载设计,保证体验无缝衔接,保证用户没有漫长的等待感,而可以轻松自在的享受等待,对加载后的内容有明确的预期呢? 设计师在进行APP设计的设计时,往往会更加专注于界面长什么样,界面和界面之间怎么跳转,给予用户什么样的操作反馈,却偏偏特别容易忽略掉一个比较重要的环节,就是APP数据加载中的设计,所以会导致我们看到的APP,往往有着华丽的启动界面,然后就是漫长的数

DICOM:DICOM三大开源库对比分析之“数据加载”

背景: 上一篇博文DICOM:DICOM万能编辑工具之Sante DICOM Editor介绍了DICOM万能编辑工具,在日常使用过程中发现,"只要Sante DICOM Editor打不开的数据,基本可以判定此DICOM文件格式错误(准确率达99.9999%^_^)".在感叹Sante DICOM Editor神器牛掰的同时,想了解一下其底层是如何实现的.通过日常使用以及阅读软件帮助手册推断其底层依赖库很可能是dcmtk,就如同本人使用dcmtk.fo-dicom.dcm4che3等

[转]6种常见的数据加载模式设计

原文链接:http://elya.cc/2014/03/31/loading/ 设计师在进行APP设计的设计时,往往会更加专注于界面长什么样,界面和界面之间怎么跳转,给予用户什么样的操作反馈,却偏偏特别容易忽略掉一个比较重要的环节,就是APP数据加载中的设计,所以会导致我们看到的APP,往往有着华丽的启动界面,然后就是漫长的数据加载等待,甚至在无网络的时候,整个处于不可用状态.那么我们怎么处理好界面交互中的加载设计,保证体验无缝衔接,保证用户没有漫长的等待感,而可以轻松自在的享受等待,对加载后的

hive原生和复合类型的数据加载和使用

原生类型 原生类型包括TINYINT,SMALLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBLE,STRING,BINARY (Hive 0.8.0以上才可用),TIMESTAMP (Hive 0.8.0以上才可用),这些数据加载很容易,只要设置好列分隔符,按照列分隔符输出到文件就可以了. 假设有这么一张用户登陆表 CREATE TABLE login ( uid BIGINT, ip STRING ) ROW FORMAT DELIMITED FIELDS TERMINA

python数据分析笔记——数据加载与整理]

[ python数据分析笔记--数据加载与整理] https://mp.weixin.qq.com/s?__biz=MjM5MDM3Nzg0NA==&mid=2651588899&idx=4&sn=bf74cbf3cd26f434b73a581b6b96d9ac&chksm=bdbd1b388aca922ee87842d4444e8b6364de4f5e173cb805195a54f9ee073c6f5cb17724c363&mpshare=1&scene=

Android4.0图库Gallery2代码分析(二) 数据管理和数据加载

Android4.0图库Gallery2代码分析(二) 数据管理和数据加载 2012-09-07 11:19 8152人阅读 评论(12) 收藏 举报 代码分析android相册优化工作 Android4.0图库Gallery2代码分析(二) 数据管理和数据加载 一 图库数据管理 Gallery2的数据管理 DataManager(职责:管理数据源)- MediaSource(职责:管理数据集) - MediaSet(职责:管理数据项).DataManager中初始化所有的数据源(LocalSo