sách gpt4 ai đã đi

Lạm dụng XmlReader ReadSubtree()

In lại Tác giả: Data Little Sun Thời gian cập nhật: 2023-10-29 02:00:42 30 4
mua khóa gpt4 Nike

Tôi cần phân tích cú pháp một tệp xml thực chất là hình ảnh của một cấu trúc cây rất lớn, vì vậy tôi sử dụng lớp XmlReader để điền thông tin vào cây một cách "động". Mỗi nút chỉ cần truyền khối xml mà nó mong đợi từ nút cha thông qua hàm ReadSubtree(). Lợi ích của việc này là bạn không phải lo lắng khi nào một nút đã sử dụng hết tất cả các nút con của nó. Nhưng bây giờ tôi tự hỏi liệu đây có thực sự là một ý tưởng hay không, vì có thể có hàng nghìn nút và khi đọc các tệp nguồn .NET, tôi thấy rằng mỗi lệnh gọi ReadSubtree tạo ra một số đối tượng mới (có thể nhiều hơn) và không có bộ nhớ đệm các đối tượng có thể tái sử dụng (theo như tôi thấy).

Có lẽ ReadSubtree() không được sử dụng nhiều, hoặc có thể tôi chỉ đang lo lắng vô ích và tôi chỉ cần gọi GC.Collect() sau khi phân tích tệp...

Hy vọng ai đó có thể làm sáng tỏ vấn đề này.

Cảm ơn trước.

làm mới:

Cảm ơn câu trả lời tuyệt vời và sâu sắc của bạn.

Tôi đã nghiên cứu mã nguồn .NET và thấy nó phức tạp hơn tôi nghĩ ban đầu. Cuối cùng tôi đã từ bỏ ý định gọi hàm này trong trường hợp này. Như Stefan đã chỉ ra, trình đọc xml không bao giờ được chuyển cho bên ngoài và tôi có thể tin tưởng vào mã phân tích luồng xml (do chính tôi viết), vì vậy tôi muốn buộc mỗi nút chịu trách nhiệm về lượng dữ liệu mà chúng đánh cắp từ luồng hơn là sử dụng hàm ReadSubtree() không quá mỏng ở cuối để tiết kiệm chỉ một vài dòng mã.

1 Câu trả lời

ReadSubTree() cung cấp cho bạn một XmlReader bao bọc XmlReader gốc. Trình đọc mới này trông giống như một tài liệu hoàn chỉnh đối với người tiêu dùng. Điều này có thể quan trọng nếu mã mà bạn truyền vào cây con cho rằng nó đang nhận được một tài liệu xml độc lập. Ví dụ, thuộc tính Depth của Reader mới bắt đầu từ 0. Đây là một lớp bao bọc rất mỏng nên bạn sẽ không sử dụng thêm bất kỳ tài nguyên nào so với khi sử dụng trực tiếp XmlReader thô và trong ví dụ bạn đưa ra, có khả năng là bạn không thực sự khai thác được nhiều từ trình đọc cây con.

Trong trường hợp của bạn, lợi thế lớn nhất là trình đọc cây con sẽ không vô tình đọc một cây con khác. Vì trình đọc cây con không quá đắt nên tính an toàn này có thể đủ, mặc dù nhìn chung nó hữu ích hơn khi bạn cần cây con trông giống như tài liệu hoặc khi bạn không tin tưởng mã chỉ đọc cây con của chính nó.

Như Will đã đề cập, bạn không bao giờ muốn gọi GC.Collect(). Nó sẽ không bao giờ cải thiện được hiệu suất.

Liên quan đến .net - Lạm dụng XmlReader ReadSubtree(), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/114327/

30 4 0
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com