Судя по вашим комментариям, я не думаю, что вам действительно нужно знать, будет ли объект перемещаться в LOH или нет. Независимо от того, является ли это фактической причиной замедления вашего приложения, не имеет значения, когда все, что вам действительно нужно, - это отображать предупреждение для пользователя, когда он вводит значение, которое «слишком велико».
Поэтому я бы посоветовал немного попроще: просто методом проб и ошибок определите значение отсечки. Если они введут размер, превышающий значение, полученное методом проб и ошибок, отобразите предупреждение.
Что касается ваших реальных проблем с производительностью, вместо выделения одного большого двумерного массива вы можете просто выделить кучу «меньших» одномерных массивов. Вместо:
Node[,] n = new Node[100,100]; // this will go the LOH
Вы бы сделали это:
Node[][] n = new Node[100][];
for(int i = 0; i < n.Length; i++) {
n[i] = new Node[100]; // none of these will be on the LOH
}
У вас все равно будет такое же количество узлов, но на LOH ничего не будет. Лично я думаю, вы, вероятно, обнаружите, что производительность на самом деле не будет сильно отличаться, но, возможно, стоит просто попробовать.
person
Dean Harding
schedule
06.05.2010