2015-12-24 16 views
6

Tôi có một danh sách và tôi muốn gán mảng của nó cho một thuộc tính.Lấy mảng từ danh sách mà không có phân bổ đống

public void BuildMesh(List<Vector3> list){ 
    mesh.vertices=list.ToArray(); 
} 

Bây giờ vấn đề:

  • Dự án này là trò chơi và rất khó khăn về thu gom rác thải để thực hiện mặc định của ToArray() không phải là một lựa chọn vì nó tạo ra một mảng mới bên cạnh mảng nội bộ danh sách của .
  • Đối tượng lưới là từ một API nguồn đóng và thuộc tính đỉnh là một Vector3 [] vì vậy không thể gán con trỏ cho nó.

Tôi có tùy chọn nào để ngăn phân bổ heap không?

EDIT: Đây không phải là một bản sao

Không thể sử dụng IList<Vector3>. Lưới là từ một API nguồn đóng và cần Vector3 [] vì vậy tôi không thể gán IList<Vector3> cho nó.

+3

Bản sao có thể có của [Danh sách tới T \ [\] mà không cần sao chép] (http://stackoverflow.com/questions/4972951/listt-to-t-without-copying) –

+1

@VadimMartynov Đây là một câu hỏi khác. Lưới là từ một API nguồn đóng và cần Vector3 [] vì vậy tôi không thể gán IList cho nó. –

+0

nếu bạn có đối tượng kích thước cố định, chỉ cần không vứt bỏ đối tượng. Thay vào đó chỉ cần đánh dấu đối tượng không sử dụng. Tạo một mảng cố định các đối tượng khi bắt đầu chương trình. Sau đó đánh dấu đối tượng được sử dụng hoặc không sử dụng thay vì tạo và xử lý đối tượng. Không yêu cầu thu gom rác. – jdweng

Trả lời

2

Tôi nghĩ bạn đang sử dụng Unity. Nếu tôi đúng, hãy thử mesh.SetVertices(list) chấp nhận List<Vector3>.

+0

Có nó hoạt động. Tôi cũng tò mò muốn tìm một giải pháp chung cho vấn đề này. –

+1

Tôi nghĩ rằng điều đó là không thể, bởi vì mảng bên trong của Danh sách có thể lớn hơn Số lượng của nó. Nếu một số lượng đỉnh cụ thể được sử dụng thường xuyên như 64 đỉnh tất cả thời gian, thì bạn có thể thử sử dụng lại mảng này để ngăn phân bổ heap thêm. –

+0

Các Setvertices hoạt động hoàn hảo với phân bổ không bằng GC. Vì vậy, vấn đề của tôi về cơ bản là giải quyết vấn đề này và tôi đã +1 câu trả lời của bạn. Câu hỏi này cũng hợp lệ như một vấn đề C# chung. Điều gì xảy ra nếu chúng ta đối mặt với tình huống trong API ngoài sự thống nhất? –

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