- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
ASP.NET Core 中的所有 I/O 操作都是异步的。服务器实现了 Stream 接口,该接口同时具备同步和异步的方法.
在进行 I/O 操作时,应优先使用异步方法,以避免阻塞线程池的线程.
如果阻塞了线程池线程,可能会导致服务器无法处理更多请求,造成急剧性性能下降.
尤其是当客户端上传速度缓慢时,同步读取将阻塞线程直到整个请求体被全部读取完成.
错误的做法 。
以下代码示例使用了同步方法 ReadToEnd,导致线程被阻塞:
public class BadStreamReaderController : Controller { [HttpGet("/contoso")] public ActionResult Get() { var json = new StreamReader(Request.Body).ReadToEnd(); return JsonSerializer.Deserialize(json); } }
在这段代码中,Get方法将整个 HTTP 请求体同步读入内存。如果客户端上传速度缓慢,应用程序将阻塞在这个读取操作上,导致效率下降.
正确的做法 。
使用异步方法 ReadToEndAsync,可以避免阻塞线程:
public class GoodStreamReaderController : Controller { [HttpGet("/contoso")] public async Task<>> Get() { var json = await new StreamReader(Request.Body).ReadToEndAsync(); return JsonSerializer.Deserialize(json); } }
这段代码使用异步读取方法,在读取过程中不会阻塞线程,可以提升性能和响应速度.
错误的做法 。
使用 HttpContext.Request.Form,会在内部执行同步读取,导致线程被阻塞:
public class BadReadController : Controller { [HttpPost("/form-body")] public IActionResult Post() { var form = HttpContext.Request.Form; Process(form["id"], form["name"]); return Accepted(); } }
正确的做法 。
使用 ReadFormAsync,进行异步读取:
public class GoodReadController : Controller { [HttpPost("/form-body")] public async Task Post() { var form = await HttpContext.Request.ReadFormAsync(); Process(form["id"], form["name"]); return Accepted(); } }
这种做法使用异步方式读取表单数据,能有效避免阻塞线程池资源.
在 ASP.NET Core 开发中,应符合框架的异步操作模式,避免使用同步方法读取 HTTP 请求文本.
这样可以有效地提升应用程序的性能和响应速度,避免因阻塞导致的急剧性性能下降.
最后此篇关于.NET最佳实践:避免同步读取HttpRequest的文章就讲到这里了,如果你想了解更多关于.NET最佳实践:避免同步读取HttpRequest的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
Khi tạo một trang asp.net sử dụng .NET framework, liệu máy khách truy cập trang đó có cần phải cài đặt .NET framework trên máy tính của họ không? TỨC LÀ. Nếu người dùng truy cập www.fakesite.com/default.aspx và họ không cài đặt khung, họ
Tôi đã đọc rất nhiều blog và câu hỏi khác nhau trên StackOverflow để cố gắng tìm câu trả lời cho vấn đề của mình, nhưng cuối cùng tôi không tìm thấy câu trả lời nào cả, vì vậy tôi nghĩ mình sẽ tự hỏi câu hỏi này. Tôi đang xây dựng một ứng dụng trong đó tôi có một luồng công nhân chạy dài thực hiện một số
Đã khóa. Câu hỏi này và câu trả lời của nó bị khóa vì câu hỏi không liên quan đến chủ đề nhưng lại có ý nghĩa lịch sử. Hiện tại không chấp nhận câu trả lời hoặc tương tác mới. Tôi luôn tự hỏi tại sao Microsoft lại chọn một cái tên kỳ lạ, không thân thiện với SEO cho một nền tảng tuyệt vời như vậy. Họ chỉ
Sự khác biệt giữa .Net Framework .Net .NET Standard 1. .NET Framework Trong tương lai, .NET Framework có thể sẽ trở thành dĩ vãng, nhưng nó vẫn được sử dụng ở nhiều nơi. Bộ này
Nếu được lựa chọn, bạn sẽ đi theo con đường nào? ASP.NET Webforms + ASP.NET AJAX hoặc ASP.NET MVC + JavaScript Framework theo lựa chọn của bạn
Tôi có một dịch vụ web sử dụng dịch vụ web của bên thứ ba qua https thông qua kết nối chuyên dụng, tôi đã áp dụng ServicePointManager.ServerCertificateValidationCallback
Tại sao tôi nên chọn Ứng dụng web ASP.NET (.NET Framework) thay vì Ứng dụng web ASP.NET Core (.NET Framework)? Tôi ở đây
Tôi chưa tìm thấy bất kỳ quy ước đặt tên nào được chấp nhận chung trên web cho các giải pháp .NET có chứa các dự án .NET Standard, .NET Core và .NET Framework. Trong trường hợp của tôi, chúng tôi có những điều sau đây trong dự án .NET Framework
.NET Compact có phải là tập hợp con hoàn hảo của .NET không? Giả sử tôi đã tính đến kích thước màn hình và các hạn chế khác và tránh các lớp và phương thức mà .NET Compact không hỗ trợ hoặc .NET Compact là GUI khác và không tương thích
Tôi đã đọc tất cả các bài viết tôi có thể tìm thấy liên quan đến thiết lập maxconnection trong connectionManagement: cụ thể là http://support.microsoft.com/kb/821268
Hiện tại tôi đang sử dụng asp.net mvc và đang băn khoăn không biết nên sử dụng Json tích hợp hay Json.Net, nhưng tôi không chắc liệu cái nào có ưu điểm hơn cái nào. Ngoài ra, nếu tôi chọn đi theo con đường Json.Net, thì tôi nên chọn
Trong Visual Studio, bạn có thể tạo ít nhất ba loại thư viện lớp khác nhau: Thư viện lớp (.NET Framework) Thư viện lớp (.NET Standard) Thư viện lớp (.NET Core) Trong khi loại đầu tiên là loại chúng ta đã sử dụng trong nhiều năm,
Sự khác biệt giữa .NET và ASP.NET là gì? Chúng liên quan thế nào? Câu trả lời hay nhấtASP.Net được xây dựng trên nền tảng .Net và cung cấp các tính năng bổ sung cho việc phát triển web. Bạn có thể xem bài viết trên wikipedia
Tôi có cần cài đặt .net framework 1.1 và 2.0 trước khi cài đặt phiên bản cao hơn (3.0) không? Hay chỉ cần cài đặt riêng framework 3.0 là đủ và hỗ trợ cho phần mềm được viết trên các phiên bản framework cũ hơn? Cảm ơn, Liran Câu trả lời hay nhất Không, bạn không cần phải cài đặt framework trước đó. TÔI
Tôi đang thực hiện một dự án cho phép mọi người có thể "cập nhật" danh mục, ví dụ: thay đổi tên danh mục. Tôi nhận được thông báo sau: This is called sau khi nhấp vào nút cập nhật với câu lệnh SQL
Luồng lớp .NET System.Net.CookieContainer có an toàn không? --Cập nhật: Trả lời của Postkey -- Có cách nào để đảm bảo rằng các biến được sửa đổi trong quá trình yêu cầu không đồng bộ (tức là HttpWebRequest.Coo
Tôi đang sử dụng JScript.NET để viết các tập lệnh trong ứng dụng C# WinForms mà tôi đang viết. Nó hoạt động tốt, nhưng tôi vừa thử đưa một số xử lý ngoại lệ vào tập lệnh, nhưng tôi không biết làm thế nào để biết mã C# của tôi đang đưa ra loại ngoại lệ nào.
Tôi cần sự giúp đỡ của bạn, ví dụ tôi có một biến kiểu thập phân và tôi muốn làm tròn nó như thế này. Ví dụ: 3,0 = 3 3,1 = 4 3,2 = 4 3,3 = 4 3,4 = 4 3,5 = 4 3,6 = 4 3,7 = 4 3.
Tôi đã từng sử dụng mã như thế này: http://msdn.microsoft.com/en-us/library/dw70f090.aspx để truy cập cơ sở dữ liệu khi làm việc trong ASP.NET (2-3 năm trước). Tôi không nhận ra tôi đã
Vì ConfigurationManager không tồn tại trong .NET Standard, cách tốt nhất để lấy các thiết lập ứng dụng cho assembly đang thực thi là gì, cho dù đó là web.config hay appSettings.{env
Tôi là một lập trình viên xuất sắc, rất giỏi!