Tôi đang gặp sự cố khi sắp xếp nhiều đối tượng trong .NET. Biểu đồ đối tượng khá lớn với một số tập dữ liệu mới đang được sử dụng, vì vậy tôi nhận được:SerializationException khi serializing nhiều đối tượng trong .NET
System.Runtime.Serialization.SerializationException
"The internal array cannot expand to greater than Int32.MaxValue elements."
Có ai khác đã đạt đến giới hạn này không? Bạn đã giải quyết nó như thế nào?
Sẽ tốt hơn nếu tôi vẫn còn có thể sử dụng được xây dựng trong cơ chế serialization nếu có thể, nhưng nó có vẻ như phải chỉ cuộn của riêng tôi (và duy trì tính tương thích ngược với các tập tin dữ liệu hiện có)
Đối tượng là tất cả POCO và đang được tuần tự hóa sử dụng BinaryFormatter
. Mỗi đối tượng được serialized thực hiện ISerializable
để chọn lọc serialize các thành viên của nó (một số người trong số họ được tính toán lại trong quá trình tải).
Dường như đây là sự cố mở đối với MS (details here), nhưng nó đã được giải quyết là Wont Fix. Chi tiết là (từ liên kết):
Nối tiếp nhị phân không thành đối tượng đồ thị với hơn ~ 13.2 triệu đối tượng. Nỗ lực làm như vậy gây ra một ngoại lệ trong ObjectIDGenerator.Rehash với thông báo lỗi gây hiểu lầm tham chiếu Int32.MaxValue.
Sau khi kiểm tra ObjectIDGenerator.cs trong mã nguồn SSCLI , dường như lớn hơn đồ thị đối tượng có thể được xử lý bởi thêm các mục bổ sung vào mảng kích cỡ. Xem những dòng sau:
// Table of prime numbers to use as hash table sizes. Each entry is the // smallest prime number larger than twice the previous entry. private static readonly int[] sizes = {5, 11, 29, 47, 97, 197, 397, 797, 1597, 3203, 6421, 12853, 25717, 51437, 102877, 205759, 411527, 823117, 1646237, 3292489, 6584983};
Tuy nhiên, nó sẽ được tốt đẹp nếu serialization làm việc cho bất kỳ kích thước hợp lý của đồ thị đối tượng.
Đóng gói dữ liệu giống như một ý tưởng rất hay. Tôi thậm chí có thể sử dụng MemoryStream để thực hiện việc đóng gói - vì vậy rất nhiều mã sẽ không cần thay đổi (nó chỉ có thể tiếp tục lưu cách hiện tại). Và có thể chỉ dành cho các lớp 'phổ biến' để có được số lượng đối tượng được lưu vào một số hợp lý. – Wilka