LinqtoSQL性能优化提升实践

摘要:
根据我的个人实践和效果,Linq to SQL性能优化按降序排列,如下所示:1.预编译CompiledQuery(如果它执行了多次)//////Utilityclassostorecompiledquery//public static classQueriesUtility{////获取返回的查询

Linq-to-SQL的性能优化,根据我的个人实践和效果降序排列,如下:

1. 预编译 CompiledQuery (如果执行次数不止一次的话)

/// <summary>
/// Utility class to store compiled queries
/// </summary>
public static class QueriesUtility
{
  /// <summary>
  
/// Gets the query that returns categories with more than five products.
  
/// </summary>
  
/// <value>The query containing categories with more than five products.</value>
  public static Func<NorthwindDataContext, int, IEnumerable<Category>>
    GetCategoriesWithMoreThanFiveProducts
    {
      get
      {
        Func<NorthwindDataContext, IEnumerable<Category>> func =
          CompiledQuery.Compile<NorthwindDataContext,  int, IEnumerable<Category>>
          ((NorthwindDataContext context, int count) => context.Categories.
            Where<Category>(cat => cat.Products.Count > count));
        return func;
      }
    }
}

调用:

using (NorthwindDataContext context = new NorthwindDataContext())
{
  QueriesUtility.GetCategoriesWithMoreThanFiveProducts(context, 5);
}

2. 缓存MappingSource

把默认的DataContext用自己的代替,代码如下:

using System;
using System.Data;
using System.Data.Linq;
using System.Data.Linq.Mapping;

namespace My.Company.Depart
{
    public class MyDataContext : DataContext
    {
        /// <summary>
        
/// Thread-safe
        
/// Cached MappingSource
        
/// </summary>
        private static MappingSource _cachedMappingSource = new AttributeMappingSource(); /* Thread-safe */
        
        public MyDataContext(IDbConnection cx)
            : base(cx, _cachedMappingSource)
        {
        }
                
        public MyDataContext(string cx, bool ojectTrackingEnabled = truebool consoleLogging = false)
            : base(cx, _cachedMappingSource)
        {
            this.ObjectTrackingEnabled = ojectTrackingEnabled;

            if (consoleLogging)
                this.Log = Console.Out;
        }

        public Table<MyTable> MyTable
        {
            get { return this.GetTable<MyTable>(); }
        }

        //blah. blah, blah......
    }
}

然后这样调用:

using (var dataContext = new MyDataContext(ConnectionStringProvider.GetDefault()))
{
  var list = dataContext.MyTable.Where(t => t.ID > 5).ToList();
  //blah. blah, blah......
}

3. 查询的时候关闭ObjectTrackingEnabled

dataContext.ObjectTrackingEnabled = false;

关于ObjectTrackingEnabled更详细的解释查看这个页面。

4. 关联表查询的时候用 LoadOptions

关于Load,LoadWith,AssociateWith查看这个页面

5. 其它参考资料

免责声明:文章转载自《LinqtoSQL性能优化提升实践》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vue移动app扫码功能上传下载后台函数以及前端脚本(webuploader) 备份下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ElasticSearch性能优化策略【转】

ElasticSearch性能优化主要分为4个方面的优化。 一、服务器部署 二、服务器配置 三、数据结构优化 四、运行期优化 一、服务器部署 1、增加1-2台服务器,用于负载均衡节点 elasticSearch的配置文件中有2个参数:node.master和node.data。这两个参 数搭配使用时,能够帮助提供服务器性能。 1.1> node.ma...

Linux性能优化实战学习笔记:第四十六讲

一、上节回顾 不知不觉,我们已经学完了整个专栏的四大基础模块,即 CPU、内存、文件系统和磁盘 I/O、以及网络的性能分析和优化。相信你已经掌握了这些基础模块的基本分析、定位思路,并熟悉了相关的优化方法。 接下来,我们将进入最后一个重要模块—— 综合实战篇。这部分实战内容,也将是我们对前面所学知识的复习和深化。 我们都知道,随着 Kubernetes、Do...

【Unity游戏开发】性能优化之在真机上开启DeepProfile与踩坑

一、引子   最近马三入职了新公司,平时除了负责编辑器开发之外还要做一些游戏性能优化方面的工作。在这里首先给大家安利一下Unity官方的性能测试分析工具URP ,这个工具目前是免费,测试的过程中也不需要接入任何SDK,测试完成以后还可以生成一份性能测试报告。当然,相比侑虎科技的UWA GOT工具来讲,目前UPR功能还是比较少的,不过在项目初期完全可以先使用...

【SQL server初级】数据库性能优化三:程序操作优化

  数据库优化包含以下三部分,数据库自身的优化,数据库表优化,程序操作优化.此文为第三部分   数据库性能优化三:程序操作优化 概述:程序访问优化也可以认为是访问SQL语句的优化,一个好的SQL语句是可以减少非常多的程序性能的,下面列出常用错误习惯,并且提出相应的解决方案     一、操作符优化   1. IN、NOT IN 操作符   IN和EXIS...

Oracle 性能优化 — 统计数据收集

ORACLE优化器的优化方式有两大类,即基于规则的优化方式(Rule-Based Optimization,简称为RBO)和基于代价的优化方式(Cost-Based Optimization,简称为CBO)。 A、 RBO方式:优化器在分析SQL语句时,更据数据库中表和索引等定义信息,遵循的是Oracle内部预定的一些规则。比如我们常见的:当一个wher...

【Vuejs】269- 提升90%加载速度——vuecli下的首屏性能优化

前言 之前用 vuecli做了个博客,是一个单页面项目,大概有十个路由直接 npm run build打包出来,有一个 1M的巨大 js文件 先挂载到服务器上试试好家伙 这加载时间 仿佛过了半个世纪 首屏页面整整加载了 9s 光加载那个大文件就花了 8s这必须得做个优化了,没有用户能忍受 9s的白屏而不关闭页面的 过程中,我还顺便把项目从 vuec...