Tôi có ứng dụng khách/máy chủ. Các thành phần máy chủ chạy, sử dụng WCF trong một thời trang 'remoting' (định dạng nhị phân, đối tượng phiên).Mã C# rất chậm với trình gỡ lỗi đính kèm; Lỗi của MemoryMappedFile?
Nếu tôi khởi động thành phần máy chủ và khởi chạy máy khách, tác vụ đầu tiên máy chủ hoàn thành trong < 0.5 giây.
Nếu tôi khởi động thành phần máy chủ có trình gỡ rối VS được đính kèm và sau đó khởi chạy ứng dụng khách, tác vụ sẽ mất 20 giây để hoàn thành.
Không có thay đổi mã - không có thay đổi biên dịch có điều kiện. Điều tương tự cũng xảy ra cho dù tôi có thành phần máy chủ được biên dịch và chạy trong 32-bit, 64 bit, với quy trình lưu trữ VS, không có quy trình lưu trữ VS hay bất kỳ sự kết hợp nào của những thứ đó.
Có lẽ quan trọng: Nếu tôi sử dụng VS.NET profiler (chế độ lấy mẫu), sau đó ứng dụng chạy nhanh như nếu không có chương trình gỡ rối kèm theo. Vì vậy, tôi không thể chẩn đoán nó theo cách đó. Chỉ cần kiểm tra, chế độ thiết bị cũng chạy nhanh. Tương tự cho chế độ lược tả đồng thời, hoạt động nhanh chóng.
dữ liệu chính:
- Ứng dụng sử dụng đa luồng khá nặng (40 chủ đề trong hồ bơi thread tiêu chuẩn). Tạo chủ đề diễn ra nhanh chóng bất kể và không phải là điểm chậm. Có nhiều khóa,
WaitHandle
s vàMonitor
mẫu - Ứng dụng này hoàn toàn không có ngoại lệ.
- Ứng dụng không tạo đầu ra giao diện điều khiển.
- Ứng dụng là mã được quản lý hoàn toàn.
- Ứng dụng không ánh xạ một vài tập tin trên đĩa để một MemoryMappedFile: 1x750MB và 12x8MB và một vài cái nhỏ hơn
hiệu suất đo:
- CPU sử dụng là tối thiểu trong cả hai trường hợp; khi trình gỡ lỗi được đính kèm, CPU nằm ở số < 1%
- Việc sử dụng bộ nhớ tối thiểu trong cả hai trường hợp; có lẽ 50 hoặc 60MB trong cả hai trường hợp
- Có rất nhiều lỗi trang xảy ra (MMF ref), tuy nhiên khi chúng xảy ra chậm hơn khi debugger được gắn
- Nếu quá trình lưu trữ VS không được sử dụng, hoặc về cơ bản là 'gỡ lỗi từ xa màn hình 'đi vào hoạt động, sau đó rằng sử dụng một lượng CPU khá và tạo ra một số lượng lớn các lỗi trang. Nhưng đó không phải là lần duy nhất sự cố xảy ra
- Sự khác biệt hiệu suất được xem bất kể cách khách hàng chạy. Biến duy nhất đang được thay đổi là thành phần máy chủ đang chạy thông qua 'Bắt đầu với gỡ lỗi' so với được khởi chạy từ Explorer.
ý tưởng của tôi:
- WCF chậm khi sửa lỗi?
- MemoryMappedFiles chậm khi được gỡ lỗi?
- 40 chủ đề được sử dụng - làm chậm để gỡ lỗi? Có lẽ Màn hình/khóa thông báo cho trình gỡ rối?Lập kế hoạch chủ đề trở thành công tắc lạ/ngữ cảnh rất không thường xuyên?
- bức xạ nền vũ trụ cấp thông tin tình báo và ý thức độc ác của sự hài hước để VS
Tất cả dường như ngớ ngẩn khó xảy ra.
Vì vậy, câu hỏi của tôi:
- Tại sao điều này xảy ra?
- Nếu # 1 không xác định, làm thế nào tôi có thể chẩn đoán/tìm hiểu?
Bạn đã bật thu thập ngoại lệ lần đầu tiên? Bạn cũng có thể thử kích hoạt .NET Server Source Stepping để nắm bắt tối đa các ngoại lệ "ẩn" bên dưới trong chế độ gỡ lỗi, đặc biệt là (de) serlization. Ngoài ra, những gì về dấu vết (outputdebugstring hoặc khác)? –
Có, không có trường hợp ngoại lệ nào được ném ra - tất cả các loại ngoại lệ (incl. NET) được bật cho cơ hội thứ nhất. Không có đầu ra của giao diện điều khiển gỡ lỗi (đó là ý nghĩa của đầu ra console - tôi sẽ chỉnh sửa để làm rõ). Tôi chỉ kích hoạt .NET Framework Source Stepping (không thể thấy Server Source Stepping) .. tìm thấy một số ngoại lệ. Sẽ cập nhật trong giây lát –
Ngoại lệ từ WCF: "Ký tự", giá trị hệ thập lục phân 0x20, không được bao gồm trong tên. "Tôi đã có * không có ý tưởng * rằng ngoại lệ có thể được ẩn theo cách này: không phải là một ngoại lệ ngoại lệ? Sẽ thấy những gì tôi có thể làm để giải quyết. Có lẽ bạn có thể đăng một câu trả lời để bạn có thể nhận được một số upvotes/một chấp nhận nếu điều này sửa chữa nó? :) –