Tôi có một phần mã hoạt động trên các mảng lớn double
(có chứa khoảng 6000 phần tử ít nhất) và thực hiện vài trăm lần (thường là 800).Rò rỉ bộ nhớ khi sử dụng mảng đôi
Khi tôi sử dụng vòng lặp tiêu chuẩn, như thế:
double[] singleRow = new double[6000];
int maxI = 800;
for(int i=0; i<maxI; i++)
{
singleRow = someObject.producesOutput();
//...
// do something with singleRow
// ...
}
Bộ nhớ sử dụng tăng khoảng 40MB (từ 40MB tại beggining của vòng lặp, đến 80MB ở cuối).
Khi tôi buộc sử dụng bộ thu gom rác để thực thi tại mỗi lần lặp lại, mức sử dụng bộ nhớ vẫn ở mức 40MB (mức tăng không đáng kể).
double[] singleRow = new double[6000];
int maxI = 800;
for(int i=0; i<maxI; i++)
{
singleRow = someObject.producesOutput();
//...
// do something with singleRow
// ...
GC.Collect()
}
Nhưng thời gian thực hiện dài gấp 3 lần! (điều quan trọng)
Làm cách nào để buộc C# sử dụng cùng một vùng bộ nhớ thay vì cấp phát bộ nhớ mới? Lưu ý: Tôi có quyền truy cập vào mã số someObject
lớp học, vì vậy nếu cần, tôi có thể thay đổi nó.
Tôi muốn xem bạn làm gì với mảng sau khi bạn nhận được nó và cách productionOutput hoạt động, nếu có thể. –