2012-07-11 25 views
7

Giả sử tôi có một đối tượng lớn chứa các thuộc tính mà tôi yêu cầu và thêm một số phương thức và một vài bộ sưu tập khá lớn.Vượt qua một đối tượng lớn hiện có hoặc tạo và vượt qua một đối tượng nhỏ

Tôi muốn biết chi phí sẽ nhiều hơn: Để chuyển như một đối số đối tượng lớn này đã tồn tại, hoặc tạo một đối tượng nhỏ chỉ chứa một số thuộc tính mà tôi yêu cầu và vượt qua?

Trả lời

14

Nếu bạn chỉ chuyển nó làm đối số cho một phương thức, chuyển đối tượng "lớn" là "rẻ hơn" - bạn sẽ chỉ chuyển một bản sao tham chiếu đối tượng, đó chỉ là kích thước của con trỏ (trừ khi đối tượng thuộc loại cấu trúc, trong trường hợp đó toàn bộ "đối tượng" được sao chép vào ngăn xếp). Nếu bạn đã tạo một đối tượng mới, ngay cả khi nó nhỏ, bạn sẽ phải trả giá phân bổ và sao chép các thuộc tính vào nó, mà bạn không có nếu bạn vượt qua đối tượng "lớn".

Nếu bạn đang truyền nó theo cách mà nó cần được tuần tự hóa (ví dụ, trên các ứng dụng, trong một cuộc gọi đến dịch vụ web, v.v.), thì có đối tượng nhỏ hơn (về cơ bản là đối tượng DTO, truyền dữ liệu) được ưa thích.

+0

Thankyou Carlos. Đó là tốt để biết. – Steve

2

Miễn là bạn vượt qua bằng cách tham chiếu, điều đó không quan trọng. Do đó bạn không nên giới thiệu thêm sự phức tạp. Trong thực tế, nó sẽ làm tốn nhiều chi phí máy hơn, vì nó sẽ phải tạo ra đối tượng container đó.

Vì bạn có vẻ lo ngại về hiệu suất nên tôi khuyên bạn nên tìm hiểu cách thức con trỏ và quản lý bộ nhớ hoạt động trong C. Khi bạn hiểu điều đó, bạn sẽ có một thời gian dễ dàng hơn nhiều để hiểu cách các phiên bản trừu tượng của họ ở các ngôn ngữ cấp cao tác động đến hiệu suất.

Các vấn đề liên quan