Одна и та же прога, скомпилированная при помощи VS 2015, .NET 4.5, Any CPU.
Под виндой стабильно 60 — 80 мб памяти отъедает и не растет.
В Ubuntu (Mono 4.6) — плавно растет в течение суток со 100 мегабайт до 700. Изначально росло до предела памяти, 512 мегабайт, потом убивалось. Взяли сервер на 2 гига памяти, но ведь такими темпами и 2 гига сожрет.
Что-то там растет, а что — не могу понять.
Расставил везде using, присвоил всему чему только можно null когда оно уже не надо, и GC.Collect(); результат кажется, не изменился. Как жрало так и жрет.
Я думаю, это ненормально. Может надо какой-то флаг компиляции поставить?
Re: Программа под Mono жрет в 3 раза памяти чем под .NET
Здравствуйте, vl690001x, Вы писали:
V>Одна и та же прога, скомпилированная при помощи VS 2015, .NET 4.5, Any CPU. V>Под виндой стабильно 60 — 80 мб памяти отъедает и не растет.
Думаю, это решающий момент. Значит Моно где-то профукивает память! А под .NET Core — то же самое?
Re[2]: Программа под Mono жрет в 3 раза памяти чем под .NET
Здравствуйте, Kolesiki, Вы писали:
K>Здравствуйте, vl690001x, Вы писали:
V>>Одна и та же прога, скомпилированная при помощи VS 2015, .NET 4.5, Any CPU. V>>Под виндой стабильно 60 — 80 мб памяти отъедает и не растет.
K>Думаю, это решающий момент. Значит Моно где-то профукивает память! А под .NET Core — то же самое?
Под .NET Core не получится запустить, много слишком того чего в нем нет. Например, System.Web.
Re[2]: Программа под Mono жрет в 3 раза памяти чем под .NET
Здравствуйте, Слава, Вы писали:
С>Здравствуйте, vl690001x, Вы писали:
V>>Одна и та же прога, скомпилированна С>Может, сдампить процесс, и попробовать дамп разобрать чем-то?
Не настолько я маньяк)
Re: Программа под Mono жрет в 3 раза памяти чем под .NET
Здравствуйте, vl690001x, Вы писали:
V>Одна и та же прога, скомпилированная при помощи VS 2015, .NET 4.5, Any CPU. V>Под виндой стабильно 60 — 80 мб памяти отъедает и не растет. V>В Ubuntu (Mono 4.6) — плавно растет в течение суток со 100 мегабайт до 700. Изначально росло до предела памяти, 512 мегабайт, потом убивалось.
При запуске из-под студии (2015 upd 3, NET 4.5) с дебагом иногда такая же фигня: при норме 1 гиг приложение начинает стремительно отъедать память, пока не сожрет всю (все свободные 12)
Перебилдинг всего иногда помогает, иногда нет
Причины данного явления не ясны, но Diagnostic Tools при этом всегда не работает
Re[2]: Программа под Mono жрет в 3 раза памяти чем под .NET
Здравствуйте, mDmitriy, Вы писали:
D>Здравствуйте, vl690001x, Вы писали:
V>>Одна и та же прога, скомпилированная при помощи VS 2015, .NET 4.5, Any CPU. V>>Под виндой стабильно 60 — 80 мб памяти отъедает и не растет. V>>В Ubuntu (Mono 4.6) — плавно растет в течение суток со 100 мегабайт до 700. Изначально росло до предела памяти, 512 мегабайт, потом убивалось. D>При запуске из-под студии (2015 upd 3, NET 4.5) с дебагом иногда такая же фигня: при норме 1 гиг приложение начинает стремительно отъедать память, пока не сожрет всю (все свободные 12) D>Перебилдинг всего иногда помогает, иногда нет D>Причины данного явления не ясны, но Diagnostic Tools при этом всегда не работает
Я релизную версию под Monо запускаю.
Но вообще, такого же не может быть в норме? Может какой-то есть компилятор или параметры компиляции специально под Mono?
Потому что, во-первых, программа сразу со старта начинает есть больше памяти примерно в 2 раза, не совсем понятно с чем это свзязано, но возможно с тем что как-то неэкономно хранятся строки (много списков со строками), и постояно память растет.
Не может же такого быть, или где-то у меня ошибка в программе, которую почему-то .net прощает, а mono — нет, или программа не оптимизировано под mono или утечка памяти.
Интересно, а можно ли консольный проект VS2015 скопилировать именно компилятором Mono?
Re: Программа под Mono жрет в 3 раза памяти чем под .NET
Здравствуйте, vl690001x, Вы писали:
V>Одна и та же прога, скомпилированная при помощи VS 2015, .NET 4.5, Any CPU. V>Под виндой стабильно 60 — 80 мб памяти отъедает и не растет. V>В Ubuntu (Mono 4.6) — плавно растет в течение суток со 100 мегабайт до 700. Изначально росло до предела памяти, 512 мегабайт, потом убивалось. Взяли сервер на 2 гига памяти, но ведь такими темпами и 2 гига сожрет. V>Что-то там растет, а что — не могу понять. V>Расставил везде using, присвоил всему чему только можно null когда оно уже не надо, и GC.Collect(); результат кажется, не изменился. Как жрало так и жрет. V>Я думаю, это ненормально. Может надо какой-то флаг компиляции поставить?
Может разница в том какой режим используется, 32-х или 64-х битный? В 64-х битном существенно больше памяти идет.
Re[2]: Программа под Mono жрет в 3 раза памяти чем под .NET
Здравствуйте, vl690001x, Вы писали:
V>В Ubuntu (Mono 4.6) — плавно растет в течение суток со 100 мегабайт до 700. Изначально росло до предела памяти, 512 мегабайт, потом убивалось. Взяли сервер на 2 гига памяти, но ведь такими темпами и 2 гига сожрет.
Без CLR Profiler сложно сказать.
Re: Программа под Mono жрет в 3 раза памяти чем под .NET
У Моно совершенно другой сборщик. Разумеется, в нем могут быть баги. Что тебе нужно сделать:
1) У моны два разных сборщика, консервативный и sgen. Надо попробовать переключить и поглядеть — осталась ли утечка.
2) Дальше ничего не поделаешь — придется моновскими тулами смотреть что в памяти подвисло. Если тебе повезет — там будет какой то один класс засирать память, так что ты сможешь написать багрепорт и попробовать придумать workaround
3) Ну а если не повезло и срется кучей разных классов — тогда как то связываться с ребятами, ковыряющими сборщик и предоставлять им воспроизводящий проблему код.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, vl690001x, Вы писали:
AVK>1) У моны два разных сборщика, консервативный и sgen. Надо попробовать переключить и поглядеть — осталась ли утечка.
Это интересно.
А как переключиться?)
Re[3]: Программа под Mono жрет в 3 раза памяти чем под .NET
Здравствуйте, vl690001x, Вы писали:
V>Здравствуйте, AndrewVK, Вы писали:
AVK>>Здравствуйте, vl690001x, Вы писали:
AVK>>1) У моны два разных сборщика, консервативный и sgen. Надо попробовать переключить и поглядеть — осталась ли утечка.
V>Это интересно. V>А как переключиться?)
Здравствуйте, vl690001x, Вы писали:
V>Одна и та же прога, скомпилированная при помощи VS 2015, .NET 4.5, Any CPU. V>Под виндой стабильно 60 — 80 мб памяти отъедает и не растет. V>В Ubuntu (Mono 4.6) — плавно растет в течение суток со 100 мегабайт до 700.
Я бы вот так сразу остерегся пенять на сборщика мусора. Проблема вполне может быть в отличии реализации каких-то System.* классов у самого Mono.
1.
кроме двух реализаций GC про которые написали выше, есть ещё опция mono --desktop ....
--desktop
Configures the virtual machine to be better suited for desktop applications. Currently this sets the GC system to avoid expanding the heap as much as possible at the
expense of slowing down garbage collection a bit.
2.
А MemoryCache или HttpRuntime.Cache используются ли, если не секрет?