Мы пытались сортировать коллекцию объектов FileInfo в .NET. Мы внедрили наш IComparer для обеспечения того, чтобы объекты FileInfo были отсортированы по нашим критериям. Затем мы заметили, что производительность сортировки объектов FileInfo во много раз медленнее, чем просто ints. В связи с догадкой (и помня, как работают ссылки на C) мы смогли повысить производительность, используя локальные переменные, чтобы ограничить количество обращений к свойствам FileInfo.Производительность ссылочного типа сортировки vs Типы значений
Моя идея заключалась в том, что локальные переменные будут быстрее доступны, чем свойства объектов. Я думаю, что это имеет смысл в мире неуправляемого кода, где я могу реально представить, как работает стек и как ссылаются значения. Тем не менее, я знаю, что мир управляемого кода может быть более сложным под обложками. Мой вопрос: могут ли эти основные идеи управления памятью и потоком программы в некорректном коде вообще проецироваться в мир управляемого кода?
В конце концов с помощью KeeperOfTheSoul мы смогли отследить это до того, как мы издевались над объектом FileInfo. По этой причине я добавил тэг RhinoMock к этому quesiton.
Я не думаю, что объект FileInfo напрямую обращается к файловой системе. В нашем тесте мы фактически издевались над файловыми объектами RhinoMock. Это поднимает хороший момент, может быть, это была рамка RhinoMock, которая замедляла наши тесты? – LJM
Возможно, я думаю, что rhino mock помещает его через какое-то отражение, конечно, достаточно, чтобы оптимизировать JIT-оптимизацию. –
Я только что проверил некоторые тесты для проверки, и это, безусловно, похоже на производительность на издевающихся объектах. Спасибо за помощь. – LJM