Bối cảnh: điều này dựa trên câu hỏi đã được hỏi và sau đó bị xóa trước khi tôi có thể trả lời - nhưng tôi nghĩ đó là một câu hỏi hay, vì vậy tôi đã dọn dẹp nó, lặp lại nó và đăng lại nó.Tôi có thể sử dụng lại các cá thể đối tượng để tránh phân bổ với protobuf-net không?
Trong trường hợp thông lượng cao sử dụng protobuf-net, trong đó rất nhiều phân bổ là một vấn đề (đặc biệt cho GC), có thể tái sử dụng các đối tượng không? Ví dụ: bằng cách thêm phương thức Clear()
?
[ProtoContract]
public class MyDTO
{
[ProtoMember(1)]
public int Foo { get; set; }
[ProtoMember(2)]
public string Bar { get; set; }
[ProtoMember(3, DataFormat = DataFormat.Group)]
public List<int> Values { get { return values; } }
private readonly List<int> values = new List<int>();
public void Clear()
{
values.Clear();
Foo = 0;
Bar = null;
}
}
Xin chào Marc, điều gì xảy ra nếu tôi không triển khai phương thức Clear()? Tất cả các trường có bị ghi đè không? – driAn
@driAn chỉ các trường có dữ liệu trong luồng trong nước mới được chỉ định. Nếu bạn sử dụng một nhà máy tùy chỉnh tái chế các trường hợp, bạn nên cung cấp mã đặt lại của riêng bạn bên trong nhà máy. Nếu bạn không sử dụng một nhà máy tùy chỉnh, đây không phải là vấn đề –
Xin chào Marc, tôi đang tìm phương pháp Deserialize() đã nói ở trên với cá thể đối tượng để điền/hợp nhất. Nhưng tôi đã không tìm thấy nó. Tôi chỉ tìm thấy một phương pháp: Serializer.Deserialize (Stream). Vẫn còn cách để xác định cá thể đối tượng cần điền không? Tôi muốn sử dụng lại các đối tượng từ một nhóm đối tượng và cách đó dường như dễ dàng hơn để đối phó với cách khác với một nhà máy tùy chỉnh ... Cảm ơn trước. –