Опять про расход памяти
От: chardex Россия  
Дата: 02.05.07 12:46
Оценка:
Добрый день! Уже задавал похожий вопрос, но ответа не получил!

В приложении активно использую DevExpress, много разных формочек. Запускаю приложение, под него сразу отведится 80-100 мб. Сначала я думал, что у меня руки кривые, но после профайлера и разного рода эксперементов, понял, что проблема в DevExpress'е. Причем мне нравится момент: только что запущенное приложение, как я уже сказал, расходует под 100 мб., но если его свернуть, то память падает до 10 мб., развернуть — 20 мб., после чего расход памяти растет довольно медленно (вот бы так было сразу после запуска!). На моей машине с гигом памяти все хорошо, но на селеронах с 256 мб. памяти уже не раз получал OutOfMemoryException. Как я почти убедился, с этим ничего не поделаешь, но всеже... надежда умирает последней .

P.S. Просьба не давать советы аля "докупить всем памяти" или "не использовать DevExpress".
Опять про расход памяти
От: nikov США http://www.linkedin.com/in/nikov
Дата: 02.05.07 13:05
Оценка: 33 (4)
#Имя: FAQ.dotnet.EmptyWorkingSet
Здравствуйте, 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();
        // 
    }
}


И будет Вам щастье...
Re[2]: Опять про расход памяти
От: chardex Россия  
Дата: 02.05.07 13:22
Оценка:
Здравствуйте, nikov, Вы писали:

N>И будет Вам щастье...

Спасибо. Помогает
Я так понимаю, это медленная опирация, так что ей лучше не злоупотреблять?)
Re[3]: Опять про расход памяти
От: nikov США http://www.linkedin.com/in/nikov
Дата: 02.05.07 13:30
Оценка:
Здравствуйте, chardex, Вы писали:

C>Я так понимаю, это медленная опирация, так что ей лучше не злоупотреблять?)


Она не только медленная сама по себе, но и скорее всего замедлит работу приложения в будущем: ему опять придется просить у операционной системы отданную память обратно. Эксперты сходятся во мнении, что лучше позволить сборщику мусора работать самому. За исключением очень редких ситуаций, когда вы точно понимаете, что вы делаете.
Re: Опять про расход памяти
От: eag Россия  
Дата: 02.05.07 19:39
Оценка:
Здравствуйте, chardex, Вы писали:

C>Добрый день! Уже задавал похожий вопрос, но ответа не получил!


C>В приложении активно использую DevExpress, много разных формочек. Запускаю приложение, под него сразу отведится 80-100 мб. Сначала я думал, что у меня руки кривые, но после профайлера и разного рода эксперементов, понял, что проблема в DevExpress'е. Причем мне нравится момент: только что запущенное приложение, как я уже сказал, расходует под 100 мб., но если его свернуть, то память падает до 10 мб., развернуть — 20 мб., после чего расход памяти растет довольно медленно (вот бы так было сразу после запуска!). На моей машине с гигом памяти все хорошо, но на селеронах с 256 мб. памяти уже не раз получал OutOfMemoryException. Как я почти убедился, с этим ничего не поделаешь, но всеже... надежда умирает последней .


C>P.S. Просьба не давать советы аля "докупить всем памяти" или "не использовать DevExpress".


Вообще-то странно, что вылетает с OutOfMemory — рантайм вроде как должен понимать сколько свободной памятиесть в системе и отжирать пропорционально?
Три великие достоинства программиста: лень, нетерпение, надменность... Л. Уолл
Re[2]: Опять про расход памяти
От: pt4h Беларусь http://dzmitryhuba.blogspot.com/
Дата: 04.05.07 07:29
Оценка: 8 (2)
Здравствуйте, 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>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.