BỐI CẢNH:Làm thế nào để thực hiện riêng tạo mảng byte của tôi và xử lý
Trong khi đang chạy ứng dụng của mình thông qua một hồ sơ, có vẻ như các điểm nóng đều tham gia vào việc phân bổ một số lượng lớn các byte mới tạm thời [] mảng.
Trong một lần chạy theo CLR Profiler, một vài thời gian ngắn (3-5 giây thời gian CPU bên ngoài trình tạo hồ sơ) tạo ra trên một gigabyte rác, phần lớn phân bổ byte [] và điều này đã kích hoạt hơn 500 bộ sưu tập.
Trong một số trường hợp, dường như ứng dụng đang chi tiêu tối đa 10% thời gian thực hiện các bộ sưu tập CPU của nó.
Rõ ràng viết lại theo thứ tự.
Vì vậy, tôi đang nghĩ đến việc thay thế phân bổ byte [] mới với một lớp pool có thể tái sử dụng bộ đệm sau này.
Something như thế này ...
{
byte[] temp = Pool.AllocateBuffer(1024);
...
}
HỎI:
Làm thế nào tôi có thể buộc các ứng dụng gọi các mã trong Pool.deAllocate thói quen (temp) khi tạm thời không còn cần thiết.
Trong đoạn mã trên, khi temp là bộ đệm byte được cấp phát Pool [], nhưng khi nó nằm ngoài phạm vi, nó sẽ bị xóa. Không phải là một vấn đề thực sự, nhưng không được tái sử dụng bởi các hồ bơi.
Tôi biết tôi có thể thay thế "số 0 trả lại"; với "Pool.deAllocate (temp); trả về 0", nhưng tôi đang cố gắng buộc sự phục hồi xảy ra.
Điều này thậm chí có thể điều khiển từ xa không?
Chúng là phân bổ mảng của mã của riêng bạn hay chúng là do phương pháp .NET Framework gây ra? –
Phân bổ mảng mã của riêng tôi – Noah
+1 để lập cấu hình trước khi tối ưu hóa! :) – TrueWill