Tôi có một dịch vụ wcf rất nhỏ được lưu trữ trong một ứng dụng giao diện điều khiển.Dịch vụ WCF Rò rỉ bộ nhớ
[ServiceContract]
public interface IService1
{
[OperationContract]
void DoService();
}
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall)]
public class Service1 : IService1
{
public void DoService()
{
}
}
và hạnh phúc của nó gọi là
using (ServiceReference1.Service1Client client = new ServiceReference1.Service1Client())
{
client.DoService(new DoServiceRequest());
client.Close();
}
Hãy nhớ dịch vụ được công bố trên basicHttpBindings.
Vấn đề
Bây giờ khi tôi thực hiện trên mã khách hàng trong một vòng lặp 1000 tôi tìm thấy sự khác biệt lớn giữa "Tất cả Heap byte" và "Bytes tư nhân" bộ đếm hiệu suất (i sử dụng profiler nhớ .net). Sau khi điều tra tôi thấy một số đối tượng không được xử lý đúng cách sau đây là danh sách các đối tượng đó (1000 ví dụ không được tìm thấy -> bằng với các cuộc gọi của khách hàng)
(không gian tên cho tất cả chúng là System.ServiceModel. các kênh)
HttpOutput.ListenerResponseHttpOutput.ListenerResponseOutputStream
BodyWriterMessage
BufferedMessage
HttpRequestContext.ListenerHttpContext.ListenerContextHttpInput.ListenerContextInputStream
HttpRequestContext.ListenerHttpContext
Câu hỏi Tại sao chúng ta có rất nhiều đối tượng chưa ga và làm thế nào để kiểm soát chúng.
Xin vui lòng giúp
Dường như thư viện hệ thống bị rò rỉ cho tôi. Mã khách hàng (như trong văn bản người dùng) không chạm vào các bộ đệm và luồng đó, và có vẻ như WCF không xử lý chúng. –
Mabushar: Bạn có may mắn với điều này không? Tôi dường như có một vấn đề tương tự. – bugfixr
@bugfixr xin lỗi anh trai tôi nhận thấy bạn tin nhắn ngày hôm nay, tôi không nhớ nếu tôi đã có thể thoát khỏi những người nhưng một điều tôi nhớ là tôi chuyển sang khuôn khổ 4.0 từ khuôn khổ 3.5, nó đã giúp một phần hoặc hoàn toàn tôi không nhớ nhưng nó đã giúp tôi bằng cách nào đó. xin lỗi vì trả lời muộn. –