У меня есть ситуация, когда я распределяю большую часть памяти, но во многих меньших субсоладах. Я заметил, что производительность значительно хуже, когда я прохожу порог около 85 000 байтов за массив. Я предполагаю, что снижение производительности заключается в том, что меньшие массивы выделяются на «кучу маленького объекта» (SOH), а не на «большой куче объекта» (LOH) на этой точке. < /P>
# из массивов < / th>
размер каждого массива (байты) < /th>
время распределения < /th>
< /tr>
< /thead>
< tbody>
1,154 < /td>
532,480 < /td>
377 мс < /td>
< /tr>
1,319 < /td>
465,920 < /td> 412 мс < /td>
< /tr>
1,539 < /td>
339,360 < /td>
439 мс < /td>
< /tr>
1847 < /td>
332 800 < /td>
435 мс < /td>
< /tr>
2,308 < /td>
266,240 < /td> 446 мс < /td>
< /tr>
3,077 < /td>
199,680 < /td>
491 мс < /td>
< /tr>
4616 < /td> 133,120 < /td>
514ms < /td>
< /tr>
9,231
66 560
4420 мс
< /tbody>
< /table>
< /div>
ПРИМЕЧАНИЕ, во всех случаях общая сумма распределенной памяти вокруг 586 МБ , но распределение в конечном итоге требует дольше по порядку матчи. C# Время выполнения, которое я хочу, чтобы эти массивы в большом объекте Heap , даже если они меньше порога . Я предполагаю, что это принесет время распределения в соответствии с остальными случаями. < /P>
Однако я не могу найти, есть ли способ сделать это. Похоже, что никто никогда не разыскивал объект, который можно было бы ранее перейти на большую часть объекта. Итак, я спрашиваю: можно ли каким -то образом пометить эти массивы, чтобы заставить их на большую кучу объекта, даже если они меньше порога 85 000 байтов?
(способ, чтобы ниже 85 000 байтов, скажем, 65 000 байтов, также решит мою проблему, но я тоже не смог найти способ сделать это!)
Подробнее здесь: https://stackoverflow.com/questions/700 ... n-if-it-do