当前位置: 首页 > news >正文

【C#】使用 LINQ 中的 Skip() 和 Take()进行分页,为什么要分页,分页作用是什么

欢迎来到《小5讲堂》
大家好,我是全栈小5。
这是是《C#》序列文章,每篇文章将以博主理解的角度展开讲解,
特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。
温馨提示:博主能力有限,理解水平有限,若有不对之处望指正!

在这里插入图片描述

目录

  • 场景
  • 分页方法
    • 效果
    • 代码
  • 分页目的
  • 分页考虑

场景

数据是通过分组查询出来,并且有统计值,这个统计值来源于另外一个表的统计值,
次数分组的数据量不大,最大可能也就在一千或者一万条记录,分组查询速度对性能影响不大。
此时,查询出来的一万条记录,如果都显示在页面,可能对前端渲染有一定性能影响,
因此,可在后端开发语言里进行内存分页。

分页方法

在 C# 中实现分页功能有不同的方法,其中一种常见的做法是使用 LINQ 中的 Skip() 和 Take() 方法。
假设你已经有一个包含所有数据的集合(例如 List),现在要实现一页显示 N 条数据的分页功能。

效果

  • 第一页
    在这里插入图片描述
    在这里插入图片描述
  • 第二页
    在这里插入图片描述
    在这里插入图片描述

代码

// 模拟数据集有1000条,页大小为15
int pageIndex = 1;
int pageSize = 15;
List<string> list = new List<string>();
for (int i = 1; i < 1000; i++)
{list.Add(Guid.NewGuid().ToString());
}
var data = list.Where(value => value.ToLower().Contains('a')).ToList();
var pageData = data.Skip((pageIndex++ - 1) * pageSize).Take(pageSize).ToList();
var pageData2 = data.Skip((pageIndex++ - 1) * pageSize).Take(pageSize).ToList();

分页目的

上面仅仅是举个简单例子,在实际场景中,针对内存操作的数据会遇到更复杂的情况,此时用这个分页也能起到不错的效果。

  • 为什么要分页
    在处理大数据量时,将所有数据一次性加载到内存中可能会导致性能和资源方面的问题。
    分页是一种常见的解决方法,它将数据划分为若干页,每页只加载一部分数据,以减少内存消耗和提高性能
  • 以下是数据分页的几个原因
  1. 提高性能
    当数据量非常庞大时,一次性加载所有数据可能会导致性能下降。通过分页,只加载当前页所需的数据,可以提高程序的响应速度和查询效率。
  2. 减少内存消耗
    将大量数据一次性加载到内存中可能会占用大量的系统资源和内存空间。通过分页,只加载当前页的数据,可以减少内存消耗,并使内存使用更高效。
  3. 改善用户体验
    分页功能可以将大量数据划分为多个页面,每次只显示一页的数据,使用户可以更方便地浏览和导航数据。
  4. 降低数据库压力
    数据库通常是存储和管理数据的主要组件。通过使用分页,只查询当前页所需的数据,可以减轻数据库的负担,提高数据库的性能和响应能力。

因此,对于大数据集合或数据库查询结果,使用分页可以解决性能和资源问题,提高程序的效率和用户体验

分页考虑

决定何时考虑分页或分库分表的关键因素是具体的应用场景和业务需求。
不同数据库的性能和可扩展性也可能会有所不同。

  • 以下是一些常见的考虑因素
    1.数据量
    数据量的增加会对查询性能产生影响。当数据量逐渐增大并且查询性能开始变差时,考虑使用分页或分库分表来提高查询效率。
    2.用户需求
    如果业务要求对大量数据进行快速、即时的分页访问,那么分页是一个合理的选择。
    3.查询响应时间
    当查询响应时间超过用户可接受的范围,例如查询时间过长导致用户等待时间过长时,可以考虑使用分页或其他优化技术。
    4.数据库负载
    当数据库负载过高,无法满足用户请求时,可以考虑使用分库分表来平衡负载。
    5.数据增长趋势
    如果数据的增长速度很快,并且预计将来会有更大的数据量,可以提前规划并考虑分页或分库分表的方案。

分页和分库分表都是一种性能优化的手段,具体业务具体分析。
最佳做法是进行性能测试和监测,了解数据库的性能瓶颈和瓶颈出现的数据量级。
根据具体情况和需求,评估是否需要采取分页、分库分表或其他性能优化措施。

总结:温故而知新,不同阶段重温知识点,会有不一样的认识和理解,博主将巩固一遍知识点,并以实践方式和大家分享,若能有所帮助和收获,这将是博主最大的创作动力和荣幸。也期待认识更多优秀新老博主。

相关文章:

【C#】使用 LINQ 中的 Skip() 和 Take()进行分页,为什么要分页,分页作用是什么

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是是《C#》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握…...

2024云服务器哪家好?阿里云、腾讯云、华为云

作为多年站长使市面上大多数的云厂商的云服务器都使用过&#xff0c;很多特价云服务器都是新用户专享的&#xff0c;本文有老用户特价云服务器&#xff0c;阿腾云atengyun.com有多个网站、小程序等&#xff0c;国内头部云厂商阿里云、腾讯云、华为云、UCloud、京东云都有用过&a…...

docker compose安装gitlab

环境 查看GitLab镜像 docker search gitlab 拉取GitLab镜像 docker pull gitlab/gitlab-ce 准备gitlab-docker.yml文件 version: 3.1 services:gitlab:image: gitlab/gitlab-ce:latestcontainer_name: gitlabrestart: alwaysenvironment:GITLAB_OMNIBUS_CONFIG: |external_url…...

Nginx——基础配置

和大多数软件一样&#xff0c;Nginx也有自己的配置文件&#xff0c;但它又有很多与众不同的地方&#xff0c;本帖就来揭开Nginx基础配置的面纱。 1、Nginx指令和指令块 了解指令和指令块有助于大家了解配置的上下文&#xff0c;下面是一个配置模板示例&#xff1a; 在这个配…...

计算机基础(存储单位)

1. 计算机中的存储单位有哪些 1.1 常见的计算机存储单位 计算机存储单位一般用bit、B、KB、MB、GB、TB、PB、EB、ZB、YB、BB、NB、DB……来表示&#xff0c;如下所示&#xff1a; bit位、比特byte&#xff08;B&#xff09;字节、字Kill Byte&#xff08;KB&#xff09;千字…...

Leetcode 494 目标和

题意理解&#xff1a; 给你一个非负整数数组 nums 和一个整数 target 。 向数组中的每个整数前添加 或 - &#xff0c;然后串联起所有整数&#xff0c;可以构造一个 表达式 &#xff1a; 例如&#xff0c;nums [2, 1] &#xff0c;可以在 2 之前添加 &#xff0c;在 1 之前添…...

Windows常用命令(文件相关、进程相关、网络相关、用户相关、特殊符号)

Windows常用命令 Windows常用命令 Windows常用命令0x01 基础操作0x02 文件操作0x03 进程操作0x04 网络相关0x05 用户相关0x06 特殊符号 0x01 基础操作 清屏&#xff1a;cls 关机&#xff1a;shutdown -s&#xff08;关机&#xff09;-r&#xff08;重启&#xff09; -f(强制)…...

摘:国六排放法规下的重型车车载终端的革新

系列文章目录 文章目录 系列文章目录一、国六排放法规下的重型车车载终端的革新二、使用步骤1.引入库2.读入数据 一、国六排放法规下的重型车车载终端的革新 添加链接描述 ascii码 二、使用步骤 1.引入库 代码如下&#xff08;示例&#xff09;&#xff1a; import numpy a…...

java读取json文件并解析并修改

要在Java中读取和解析JSON文件&#xff0c;可以使用Java提供的JSON库&#xff0c;例如Jackson、Gson或JSON.simple。以下是使用Jackson库的示例代码&#xff1a; 首先&#xff0c;你需要添加Jackson库的依赖到你的项目中。如果你正在使用Maven&#xff0c;可以在pom.xml文件中…...

2024年前端面试中JavaScript的30个高频面试题之基础知识

中级 高级知识 充分准备你的下一个JavaScript面试,增强信心! 无论你是老手还是刚进入技术行业,这份2024年必备资源都将帮助你复习核心概念,从基本语言特性到高级主题。 在本文中,我汇总了30个最关键的JavaScript面试题以及详细的答案和代码示例。 深入探索这宝贵的收藏,以确…...

鸿蒙设备-开发板基础学习(BearPi-HM Micro)

theme: minimalism 每当学习一门新的编程语言或者上手一款新的开发板&#xff0c;在学习鸿蒙设备开发过程中&#xff0c;带大家写的第一个程序&#xff0c;通过这个程序&#xff0c;我们可以对鸿蒙设备开发的整个流程有一个初步的体验。BearPi-HM Micro开发板为例&#xff1a;…...

Oracle导入导出dump

创建目录&#xff1a; create directory *** as /bak; #***名称可以随便命名 需要手工创建/bak,并且此目录oracle用户有读取&#xff0c;目录地址空间要够用。 查看所有目录 select * from DBA_DIRECTORIES;---查询导入导出的目录 导入 impdp ****/**** direc…...

判断vector、string是否存在某个元素

1、string字符串中是否存在某个字符&#xff08;char&#xff09; string中find()返回值是字母在母串中的位置&#xff08;下标索引&#xff09;&#xff0c;如果没有找到&#xff0c;那么会返回一个特别的标记npos。&#xff08;返回值可以看成是一个int型的数&#xff09; …...

C语言--结构体详解

C语言--结构体详解 1.结构体产生原因2.结构体声明2.1 结构体的声明2.2 结构体的初始化2.3结构体自引用 3.结构体内存对齐3.1 对齐规则3.2 为什么存在内存对齐3.3 修改默认对⻬数 4. 结构体传参 1.结构体产生原因 C语言将数据类型分为了两种&#xff0c;一种是内置类型&#xf…...

外卖骑手与行人之间的非零和博弈

一、背景 自2013年成立以来&#xff0c;美团外卖一直保持着高速增长&#xff0c;通过提供便捷、高效的外卖服务&#xff0c;满足了大量消费者的需求。美团外卖的服务不仅限于基础的送餐服务&#xff0c;还涵盖了多种生活服务&#xff0c;如超市便利、药品配送等&#xff0c;满…...

[AutoSar]基础部分 RTE 06 对runnable的触发和SWC的影响

目录 关键词平台说明一、runnable二、RTE的event2.1Mode类型event2.2周期触发类型2.3 数据交互触发 三、internal runnable value四、专属运行区指定五、per_instance memory 关键词 嵌入式、C语言、autosar、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商T…...

网络层协议及IP编址与IP路由基础华为ICT网络赛道

目录 4.网络层协议及IP编址 4.1.网络层协议 4.2.IPv4地址介绍 4.3.子网划分 4.4.ICMP协议 4.5.IPv4地址配置及基本应用 5.IP路由基础 5.1.路由概述 5.2.静态路由 5.3.动态路由 5.4.路由高阶特性 4.网络层协议及IP编址 4.1.网络层协议 IPv4(Internet Protocol Versi…...

基于stm32f4的蓝牙控制小车

1. 引言 蓝牙的创始人是瑞典爱立信公司&#xff0c;蓝牙技术是一种无限数据与语音通信的开放性全球规范&#xff0c;它以低成本的近距离无线连接为基础&#xff0c;为固定与移动设备通信环境建立一个特别连接。手机之间通过蓝牙实现数据共享成为常理&#xff0c;将手机变为遥…...

基于BP神经网络的租金预测

目录 摘要 BP神经网络参数设置及各种函数选择 参数设置 训练函数 传递函数 学习函数 性能函数 显示函数 前向网络创建函数 BP神经网络训练窗口详解 训练窗口例样 训练窗口四部详解 基于BP神经网络的租金预测 代码下载:基于BP神经网络的租金预测(代码完整,数据齐全)资源-CS…...

C语言学习记录—进阶作业(通讯录文件版本)

通讯录 1. 添加一个函数&#xff0c;在退出通讯录的时候把信息到保存到文件中 2. 添加一个函数&#xff0c;在通讯录打开的时候&#xff0c;可以把文件中的信息加载到通讯录中 contact.h文件 #pragma once #include <string.h> #include <stdio.h> #include <…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

LangChain 中的文档加载器(Loader)与文本切分器(Splitter)详解《二》

&#x1f9e0; LangChain 中 TextSplitter 的使用详解&#xff1a;从基础到进阶&#xff08;附代码&#xff09; 一、前言 在处理大规模文本数据时&#xff0c;特别是在构建知识库或进行大模型训练与推理时&#xff0c;文本切分&#xff08;Text Splitting&#xff09; 是一个…...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?

系列回顾&#xff1a; 在上一篇《React核心概念&#xff1a;State是什么&#xff1f;》中&#xff0c;我们学习了如何使用useState让一个组件拥有自己的内部数据&#xff08;State&#xff09;&#xff0c;并通过一个计数器案例&#xff0c;实现了组件的自我更新。这很棒&#…...

Android屏幕刷新率与FPS(Frames Per Second) 120hz

Android屏幕刷新率与FPS(Frames Per Second) 120hz 屏幕刷新率是屏幕每秒钟刷新显示内容的次数&#xff0c;单位是赫兹&#xff08;Hz&#xff09;。 60Hz 屏幕&#xff1a;每秒刷新 60 次&#xff0c;每次刷新间隔约 16.67ms 90Hz 屏幕&#xff1a;每秒刷新 90 次&#xff0c;…...

华为云Flexus+DeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手

华为云FlexusDeepSeek征文 | 基于Dify构建具备联网搜索能力的知识库问答助手 一、构建知识库问答助手引言二、构建知识库问答助手环境2.1 基于FlexusX实例的Dify平台2.2 基于MaaS的模型API商用服务 三、构建知识库问答助手实战3.1 配置Dify环境3.2 创建知识库问答助手3.3 使用知…...