Добрый день! Уже задавал похожий вопрос, но ответа не получил!
В приложении активно использую DevExpress, много разных формочек. Запускаю приложение, под него сразу отведится 80-100 мб. Сначала я думал, что у меня руки кривые, но после профайлера и разного рода эксперементов, понял, что проблема в DevExpress'е. Причем мне нравится момент: только что запущенное приложение, как я уже сказал, расходует под 100 мб., но если его свернуть, то память падает до 10 мб., развернуть — 20 мб., после чего расход памяти растет довольно медленно (вот бы так было сразу после запуска!). На моей машине с гигом памяти все хорошо, но на селеронах с 256 мб. памяти уже не раз получал OutOfMemoryException. Как я почти убедился, с этим ничего не поделаешь, но всеже... надежда умирает последней
![](/Forum/Images/smile.gif)
.
P.S. Просьба не давать советы аля "докупить всем памяти" или "не использовать DevExpress".
Здравствуйте, chardex, Вы писали:
C>P.S. Просьба не давать советы аля "докупить всем памяти" или "не использовать DevExpress".
using System;
using System.Runtime.InteropServices;
class Program
{
[DllImport("Psapi.dll")]
static extern bool EmptyWorkingSet(IntPtr hProcess);
static void ClearMemory()
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
EmptyWorkingSet(System.Diagnostics.Process.GetCurrentProcess().Handle);
}
static void Main()
{
// ...
ClearMemory();
//
}
}
И будет Вам щастье...
Здравствуйте, nikov, Вы писали:
N>И будет Вам щастье...
Спасибо. Помогает
![](/Forum/Images/smile.gif)
Я так понимаю, это медленная опирация, так что ей лучше не злоупотреблять?)
Здравствуйте, chardex, Вы писали:
C>Добрый день! Уже задавал похожий вопрос, но ответа не получил!
C>В приложении активно использую DevExpress, много разных формочек. Запускаю приложение, под него сразу отведится 80-100 мб. Сначала я думал, что у меня руки кривые, но после профайлера и разного рода эксперементов, понял, что проблема в DevExpress'е. Причем мне нравится момент: только что запущенное приложение, как я уже сказал, расходует под 100 мб., но если его свернуть, то память падает до 10 мб., развернуть — 20 мб., после чего расход памяти растет довольно медленно (вот бы так было сразу после запуска!). На моей машине с гигом памяти все хорошо, но на селеронах с 256 мб. памяти уже не раз получал OutOfMemoryException. Как я почти убедился, с этим ничего не поделаешь, но всеже... надежда умирает последней
.
C>P.S. Просьба не давать советы аля "докупить всем памяти" или "не использовать DevExpress".
Вообще-то странно, что вылетает с OutOfMemory — рантайм вроде как должен понимать сколько свободной памятиесть в системе и отжирать пропорционально?
Три великие достоинства программиста: лень, нетерпение, надменность... Л. Уолл
Здравствуйте, eag, Вы писали:
eag>Здравствуйте, chardex, Вы писали:
eag> Вообще-то странно, что вылетает с OutOfMemory — рантайм вроде как должен понимать сколько свободной памятиесть в системе и отжирать пропорционально?
А какое по вашему мнению должно быть поведение рантайма в случае нехватки памяти?
Можно самому предупредить ситуацию возникновения OutOfMemoryException через использование
public sealed class MemoryFailPoint : CriticalFinalizerObject, IDisposable
Creating an instance of a MemoryFailPoint class creates a memory gate. A memory gate is a check for sufficient resources prior to initiating an activity requiring a large amount of memory. Failing the check throws an InsufficientMemoryException that avoids starting an operation, reducing the possibility of an application failing during execution due to lack of resources. This allows an application to decrease its performance in an effort to avoid an OutOfMemoryException and any state corruption that may result from improper handling of an OutOfMemoryException in arbitrary locations in code.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>