2016-02-15 15 views
16

Tôi có một phương pháp đơn giản hành động như thế này:ASP.NET WebAPI đầu ra được 40 × chậm hơn khi byte đơn được thêm vào phản ứng

public class TestApiController : ApiController 
{ 
    [Route("api/string"), HttpGet] 
    public string GetString(int length) 
    { 
     return new string('x', length); 
    } 
} 

Thời gian đáp ứng (theo quan sát của Fiddler):

GET /api/string?length=1186 
    0.008 
    0.007 
    0.007 
    ... 

GET /api/string?length=1187 
    0.208 
    0.212 
    0.205 
    ... 

Tức là, bằng cách thêm một byte vào phản hồi, thời gian xử lý tăng lên 40 ×.

Hành vi này hoàn toàn nhất quán và tôi quan sát nó cả trong Web Server của Visual Studio và trong IIS 8.5 (tuy nhiên, ngưỡng kích thước phản hồi cụ thể hơi khác nhau).

Tại sao nó sẽ hoạt động như thế này?


EDIT: Trong trường hợp của tôi, ESET NOD32 chống virus kiểm tra giao thức HTTP là thủ phạm.

+2

Dường như vấn đề nằm trong môi trường của bạn, ở đâu đó. Tôi đã thử phương pháp hành động này trên máy tính xách tay của tôi và nó luôn luôn chỉ mất một vài phần nghìn giây cho mỗi yêu cầu cho tất cả các độ dài hợp lý (50 - 500000). Vì vậy, việc cung cấp các chi tiết về môi trường sẽ thực sự giúp ích (các phiên bản os, websever, .net và asp.net, các cấu hình ứng dụng và máy chủ). –

+0

có sự khác biệt về thời gian phản hồi khác với 1186 và 1187 không? –

+1

tắt antywirus và kiểm tra. Đây không phải là trò đùa, có khả năng rằng nó không biết nó là gì và nó đang làm cho quét lớn hơn –

Trả lời

2

Phần mềm AntiVirus đang quét dữ liệu đến/đi từ máy tính của bạn.

Chúng được lập trình để biết cách hiểu dữ liệu của các loại tiêu chuẩn và không tạo scann trên đơn giản strings ints datatable. Khi bạn đang thao tác dữ liệu trực tiếp, bạn đang nói với phần mềm chống vi-rút "Xin chào, tôi lạ xin hãy kiểm tra tôi", các quy tắc "chống vi-rút" bị ẩn nhưng cũng có thể có loại khác "như kích thước" vv. Trong trường hợp của bạn nó đã chậm hơn, Nó đã phải làm thêm các công việc quét để đảm bảo rằng bạn được an toàn. Đây là một vấn đề rất được biết đến trên các giải pháp Intranet đang chạy các ứng dụng tùy chỉnh đang gửi một số dữ liệu tùy chỉnh.

1

Có thể bạn đang chuyển qua MTU cho mạng và các gói đang bị phân mảnh khi truyền qua mạng. Các gói trên một mạng điển hình tối đa chỉ dưới 1500 sau đó chúng được tách ra.

Thử chạy Wireshark và xem liệu điều đó có thể giúp bạn theo dõi vấn đề không. Bạn cũng có thể thử bật Jumbo Frames trên bộ điều hợp mạng của mình và xem điều đó có hữu ích không.

Các vấn đề liên quan