加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_汕头站长网 (https://www.0754zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

10个小技巧!写出高性能的ASP.NET Core代码

发布时间:2022-10-13 12:55:29 所属栏目:Asp教程 来源:
导读:  异步执行I/O操作

  在执行I/O操作时,您应该异步执行它们,这样就不会影响其他进程。I/O操作意味着对文件执行一些操作,比如上传或检索文件。它可以是任何操作如:图像上传,文件上传或其他任何操作。如果
  异步执行I/O操作
 
  在执行I/O操作时,您应该异步执行它们,这样就不会影响其他进程。I/O操作意味着对文件执行一些操作,比如上传或检索文件。它可以是任何操作如:图像上传,文件上传或其他任何操作。如果您试图以同步的方式完成它,那么它会阻塞主线程并停止其他后台执行,直到I/O完成为止。因此,从提升性能上来说,您在对I/O进行操作时应该始终进行异步执行。
 
  我们有很多异步方法可用于I/O操作,如ReadAsync、WriteAsync、FlushAysnc等。下面是一个简单的例子,说明我们如何异步创建一个文件的副本。
 
  public async void CreateCopyOfFile()
  {  
      string dir = @"c:\Mukesh\files\";  
    
      using (StreamReader objStreamReader= File.OpenText(dir + "test.txt"))  
      {  
          using (StreamWriter objStreamWriter= File.CreateText(dir+ "copy_test.txt"))  
          {  
  await CopyFileToTarget(objStreamReader, objStreamWriter);
          }  
      }  
  }  
    
  public async Task CopyFileToTarget(StreamReader objStreamReader, StreamWriter objStreamWriter)
  {   
      int num;
      char[] buffer = new char[0x1000];
    
      while ((num= await objStreamReader.ReadAsync(buffer, 0, buffer.Length)) != 0)
      {  
  await objStreamWriter.WriteAsync(buffer, 0, num);
      }   
  }
  尽量使用缓存
 
  如果我们能在每次执行的时候减少减少对服务器的请求次数,那么我们就可以提高应用程序的性能。这并不意味着您执行的时候不会请求服务器,而是意味着您不会每次执行都请求服务器。第一次,您将请求服务器并获得响应,此响应将在某个地方存储一段时间(将有一些到期),下一次当您对相同的响应进行调用时,您将首先检查您是否已经在第一个请求中获得了数据并存储在某个地方,如果是的话asp数据库教程,您将检查是否已经获得了数据。使用存储的数据,而不是调用服务器。
 
  将数据保存在某个位置并让下次请求从这个地方获取数据而不是从服务器获取是一种很好的做法。在这里,我们可以使用缓存。缓存内容有助于我们再次减少服务器调用,并帮助我们提高应用程序的性能。我们可以在客户端缓存、服务器端缓存或客户机/服务器端缓存等位置的任意点执行缓存。
 
  我们可以在ASP.NET Core中使用不同类型的缓存,比如我们可以在内存中进行缓存,也可以使用响应缓存,也可以使用分布式缓存。更多关于ASP.NET Core 中的缓存
 
  public async Task GetCacheData()
  {  
  var cacheEntry = await
  _cache.GetOrCreateAsync(CacheKeys.Entry, entry =>
      {  
  entry.SlidingExpiration = TimeSpan.FromSeconds(120);
          return Task.FromResult(DateTime.Now);
      });  
    
      return View("Cache", cacheEntry);
  }
  优化数据访问
 
  我们还可以通过优化数据访问逻辑、数据库表和查询来提高应用程序的性能。众所周知,大多数应用程序都使用某种数据库,每次从数据库获取数据时,都会影响应用程序的性能。如果数据库加载缓慢,则整个应用程序将缓慢运行。这里我们有一些建议:
 
  减少HTTP请求的次数,意味着您应该始终尝试减少网络往返次数。试着一次得到所有的数据。这意味着不对服务器进行多次调用,只需进行一两次调用就可以带来所有所需的数据。经常对不经常变化的数据设置缓存。不要试图提前获取不需要的数据,这会增加响应的负载,并导致应用程序的加载速度变慢。优化自定义代码
 
  除了业务逻辑和数据访问代码之外,应用程序中可能还有一些自定义代码。确保此代码也是优化的。这里有一些建议:
 
  应该优化对每个请求执行的自定义日志记录、身份验证或某些自定义处理程序的代码。不要在业务逻辑层或中间件中执行长时间运行的代码,它会阻塞到服务器的请求,从而导致应用程序需要很长时间才能获得数据。您应该在客户端或数据库端为此进行优化代码。始终检查长期运行的任务是否应该异步执行,而不影响其他进程。您可以使用实时客户端-服务器通信框架,如:SignalR,来进行异步工作。Entity Framework Core 的查询优化
 
  众所周知,EF Core是一个面向.NET开发人员的ORM,它帮助我们处理数据库对象,而不像往常那样编写大量代码。它帮助我们使用模型的数据库。数据访问逻辑代码在性能上起着至关重要的作用。如果您的代码没有优化,那么应用程序的性能通常就不会很好。
 
  但是,如果您在EFCore中以优化的方式编写数据访问逻辑,那么肯定会提高应用程序的性能。在这里,我们有一些技巧来提高性能。
 
  在获取只是用来只读显示的数据时不使用跟踪。它提高了性能。尝试在数据库端过滤数据,不要使用查询获取整个数据,然后在您的末尾进行筛选。您可以使用EF Core中的一些可用功能,可以帮助您在数据库端筛选数据的操作,如:WHERE,Select等。使用Take和Skip来获取我们所必须要显示的数量的记录。这里可以举一个分页的例子,在这个例子中,您可以在单击页码的同时使用Take和Skip来获取当前页面的数据。
 
  让我们以一个例子为例,了解如何使用Select和AsNoTracking优化EF Core的查询。
 
  public async Task GetPagedPendingPosts(int pageIndex, int pageSize, List allowedCategories)
  {  
  var allowedCatIds = allowedCategories.Select(x => x.Id);
  var query = _context.Post
  .Include(x => x.Topic.Category)
  .Include(x => x.User)
 
  .Where(x => x.Pending == true && allowedCatIds.Contains(x.Topic.Category.Id))
  .OrderBy(x => x.DateCreated);
    
      return await PaginatedList.CreateAsync(query.AsNoTracking(), pageIndex, pageSize);
  }
  其他一些提示
 
  这里我们还有一些其他性能改进的东西可以在ASP.NET Core应用程序中进行实现。
 
  编写优化和测试代码。您还可以使用来自专业高级开发者的代码示例,包括产品文档。产品团队编写的代码(如C#团队)通常是优化的、现代化的,并且遵循最佳实践。使用经过优化和良好测试的API和库。例如,在某些情况下,ADO.NET可能是比 Entity Framework 或其他ORM库更好的选择。如果您需要下载一个很大的文件的话,您可能需要考虑使用压缩算法。这里有几个内置的压缩库,如Gzip和Brotli。
 
  public void ConfigureServices(IServiceCollection services)
  {  
  services.AddResponseCompression();
    
  services.Configure(options =>
      {  
  options.Level = CompressionLevel.Fastest;
      });  
  }
  附加的建议(面向Client)
 
  我想分享一些面向客户端的提升性能的技巧。如果您正在使用ASP.NET Core MVC创建网站,下面是一些提示:
 
  最后
 
  今天,我们学习了如何提升ASP.NET Core 应用程序的性能。非常希望这篇文章对你有所帮助,如果您有任何问题或建议,可以在博客下面进行留言或者点赞!最后感谢大伙的阅读asp数据库教程,如果你有兴趣的话可以加入ASP.NET Core实战项目交流群637326624跟大伙进行交流,或者加我微信:jkingzhu,备注:合肥,我拉你进入合肥.NET技术社区进行交流!
 
  原文地址:cnblogs.com/yilezhu/p/10507984.htmlVS2022 / C#10/.NET6零基础教程合集
 
  平心而论,C#易于上手,新手友好也是其一大亮点。如果你是编程小白,或想系统深入地快速掌握C#编程。本教程千万别错过。真的录制不易!反正我是免费分享啊,不要白不要惹!还有.NET6完整教程(99P视频),全都是公益分享!
 
  本教程主要包含C#语法基础,基于全新的C#10和.NET6的零基础技术分享,从零开始了解基于C#语言开发的工具、项目、以及核心语法。最终能独立完成基于C#语言的基本开发。教程还包含.NET6基础教程合集和最新的VS2022安装包及安装教程。需要的小伙伴可免费自取!
 

(编辑:云计算网_汕头站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!