精华内容
下载资源
问答
  • 用法:只需要在你希望释放的时候调用FlushMemory()即可.. http://xuxuhuy.blog.163.com/blog/static/1032932920116110204080/ 转载于:https://www.cnblogs.com/zhaogaojian/p/8477073.html

     [System.Runtime.InteropServices.DllImport("kernel32.dll")]
            public static extern bool SetProcessWorkingSetSize(IntPtr proc, int min, int max);
            public void FlushMemory()
            {
                GC.Collect();
                GC.WaitForPendingFinalizers();
                if (Environment.OSVersion.Platform == PlatformID.Win32NT)
                {
                    SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
                }
            }

     

    用法:只需要在你希望释放的时候调用FlushMemory()即可..

    http://xuxuhuy.blog.163.com/blog/static/1032932920116110204080/

    转载于:https://www.cnblogs.com/zhaogaojian/p/8477073.html

    展开全文
  • WPF 内存释放

    2019-03-23 00:46:00
    WPF 内存释放 原文:WPF 内存释放WPF 项目中引用到Transitionals 实现图片转场特效,发现每次图片转场内存都会增加,在每次转场后进行内存压缩 记录 解决方案如下: GC.Collect(); GC....
    原文:WPF 内存释放

    在WPF 项目中引用到Transitionals 实现图片转场特效,发现每次图片转场内存都会增加,在每次转场后进行内存压缩

    记录 解决方案如下:

    GC.Collect();
    GC.WaitForPendingFinalizers();
    if (Environment.OSVersion.Platform == PlatformID.Win32NT)
    {
      SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, -1, -1);
    }
    
    [DllImport("kernel32.dll")]
    private static extern bool SetProcessWorkingSetSize(IntPtr proc, int min, int max);
    

     

    posted on 2019-03-23 00:46 NET未来之路 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/lonelyxmas/p/10582260.html

    展开全文
  • WPF程序内存释放

    2020-12-19 19:48:54
    程序原理是掉了C++库,然后有个回调函数,内存已经释放。C++不停的返回数据,Wpf将数据显示到折线图和列表上,并保存到数据库,折线图和列表只显示最新的100条数据,其他都移除了,每处理几百条批量保存一次数据库。...
  • WPF内存释放

    2010-12-18 14:01:00
    之前写了一遍了,哪知道由于时间太长可能是网站的Session过期了吧,提交之后又让我重新登录,登录之后就哈都没有了,我哭啊。这遍我没有校稿有语句不通顺...但后来我们发现这个项目竟然"吃"内存,这让我们很郁闷靠了...

    之前写了一遍了,哪知道由于时间太长可能是网站的Session过期了吧,提交之后又让我重新登录,登录之后就哈都没有了,我哭啊。这遍我没有校稿有语句不通顺的地方请大家多多谅解

       最近一直在做项目忙滴很,所以没时间写博客。还好项目快收尾了心情还是比较好哒。昨天我们进行了大面积的程序测试,除了一些小的bug之外整体的项目还是让我们比较满意德。但后来我们发现这个项目竟然"吃"内存,这让我们很郁闷靠了,这么长时间的努力不会白废了吧,要知道一个系统的性能是很重要的。之后我们这对这个项目时行了内存监视。

    注意任务管理器中的PresentationHost.exe 进程 [Windows Presentation Foundation (WPF) 宿主 (PresentationHost.exe) 是一个应用程序,它使 WPF 应用程序可承载于兼容的浏览器(包括 Microsoft Internet Explorer 6 及更高版本)中。(摘自MSDN)]

    刚开始的时候内存使用情况是178628K

     

    半个小时之后1051696K相差多少我想就不用我说了吧。

     

    之后我们就此问题进行了讨论,拿出了N+1种方法结果也不尽如人意。中午在网上看到了一个方法,我们决定试试。于进在App.xaml中出现了以下代码。

    ExpandedBlockStart.gif代码
           [DllImport("kernel32.dll")]
            
    public static extern bool SetProcessWorkingSetSize(IntPtr proc, int min, int max);

            
    public void FulshMemor()
            {
                
    if (Environment.OSVersion.Platform == PlatformID.Win32NT)
                    SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess().Handle, 
    -1-1);
            }

            
    public App()
            {
                
    this.Exit += new ExitEventHandler(App_Exit);
                var timer 
    = new DispatcherTimer{Interval=TimeSpan.FromMinutes(20}; 
                timer.Tick 
    += (s, e) => FulshMemor();
                timer.Start();
            }

     

    在应用程序中,往往为了释放内存等,使用一些函数,其实,对于内存操作函数要谨慎使用,比如大家常常想到的 SetProcessWorkingSetSize,其实对于windows来说,系统会自动在程序闲置时(如程序被最小化)释放内存的,自己用内存释放时,往往会造成一些莫名的内存错误,造成自己的应用程序及系统不稳定。

    看看这个API  SetProcessWorkingSetSize
    这是从MSDN摘下的原话

    Using the SetProcessWorkingSetSize function to set an application's minimum and maximum working set sizes does not guarantee that the requested memory will be reserved, or that it will remain resident at all times. When the application is idle, or a low-memory situation causes a demand for memory, the operating system can reduce the application's working set. An application can use the VirtualLock function to lock ranges of the application's virtual address space in memory; however, that can potentially degrade the performance of the system.

    使用这个函数来设置应用程序最小和最大的运行空间,只会保留需要的内存。当应用程序被闲置或系统内存太低时,操作系统会自动调用这个机制来设置应用程序的内存。应用程序也可以使用   VirtualLock   来锁住一定范围的内存不被系统释放。


    When you increase the working set size of an application, you are taking away physical memory from the rest of the system. This can degrade the performance of other applications and the system as a whole. It can also lead to failures of operations that require physical memory to be present; for example, creating processes, threads, and kernel pool. Thus, you must use the SetProcessWorkingSetSize function carefully. You must always consider the performance of the whole system when you are designing an application.

    当你加大运行空间给应用程序,你能够得到的物理内存取决于系统,这会造成其他应用程序降低性能或系统总体降低性能,这也可能导致请求物理内存的操作失败,例如:建立 进程,线程,内核池,就必须小心的使用该函数。
    程序每20分钟执行一次内存释放。20分钟之后的内存使用情况 301192K是不是效果很明显呐

     

    再看看性能指标的一些参数,老子TM一下子就疯了。虽然对PresentationHost.exe 程序进行了收缩,但虚拟的内存并没有进行释放。

    事实上,使用该函数并不能提高什么性能,也不会真的节省内存。
    因为他只是暂时的将应用程序占用的内存移至虚拟内存,一旦,应用程序被激活或者有操作请求时,这些内存又会被重新占用。如果你强制使用该方法来 设置程序占用的内存,那么可能在一定程度上反而会降低系统性能,因为系统需要频繁的进行内存和硬盘间的页面交换。
    BOOL SetProcessWorkingSetSize(
       HANDLE hProcess,
       SIZE_T dwMinimumWorkingSetSize,
       SIZE_T dwMaximumWorkingSetSize
    );
    将 2个   SIZE_T   参数设置为 -1 ,即可以使进程使用的内存交换到虚拟内存,只保留一小部分代码
    而桌面日历秀 之所以能够 总是保持 最小内存,是因为使用了定时器,不停的进行该操作,,所以性能可想而知,虽然换来了小内存的假象,对系统来说确实灾难。
    当然,该函数也并非无一是处,
    1 。当我们的应用程序刚刚加载完成时,可以使用该操作一次,来将加载过程不需要的代码放到虚拟内存,这样,程序加载完毕后,保持较大的可用内存。VB尤甚
    2.程序运行到一定时间后或程序将要被闲置时,可以使用该命令来交换占用的内存到虚拟内存。

    最后没办法老子在调用API后使用了GC进行强制内存回收。虽然达到了理解的效果,但本人并不推荐使用这种方法。如果大家有针对WPF内存释放的好方法的话白忘拿出来分享一下哦。

    转载于:https://www.cnblogs.com/homezzm/archive/2010/12/18/1909947.html

    展开全文
  • WPF内存释放,C#

    2019-08-05 14:35:56
    WPF用起来虽然很爽,但是内存涨的很过分啊!曾让我一度想放弃这个平台。。。内存一直狂涨,100,200,300.。。。。GC也回收不定,直到有一天,找到了方法! Nuget搜索lierda.WPFHelper,再AppStratup时,new一下,...

    WPF用起来虽然很爽,但是内存涨的很过分啊!曾让我一度想放弃这个平台。。。内存一直狂涨,100,200,300.。。。。GC也回收不定,直到有一天,找到了方法!

    Nuget搜索lierda.WPFHelper,再AppStratup时,new一下,然后内存基本可以压缩到50MB以内,这个DLL每30s压缩一次内存,最低可以压缩到10MB。

     

     

    示例代码:

      /// <summary>    

    /// App.xaml 的交互逻辑    

    /// </summary>  

     public partial class App : Application  

     {      

     LierdaCracker cracker = new LierdaCracker();        

    protected override void OnStartup(StartupEventArgs e)      

     {          

     cracker.Cracker(100);//垃圾回收间隔时间          

     base.OnStartup(e);      

     }  

     }
     

    展开全文
  • WPF应用程序的内存有时会成为性能瓶颈 试了许多方式与API函数 最终用的这种方法
  • WPF内存问题

    2012-09-05 11:29:01
    WPF内存问题困扰了很久. 众所周知,如果长时间使用WPF的程序,它的内存占有将会持续增长。甚至持续的点击一个Button,它的内存也会不断的增长。...http://www.dotnetdev.cn/2010/04/wpf内存释放解决
  • 窗体关闭以后 ViewModel 并没有释放,再次调用改窗体后,前一个ViewModel才释放, 或者是程序关闭以后才释放 ,搞不懂。。。 如果要马上释放ViewModel可以在Window关闭以后将DataContent 设置为null , 这样...
  • 在搜wpf相关资料时看到说wpf程序很耗内存,现在想优化下自己的程序。 搜了下内存、资源释放的资料,什么GC啊、Dispose啊、托管资源啊、非托管资源啊都是这些,但看不懂。 我想问下怎样可以简单优化自己的程序...
  • 1.项目中有一个Window; 2.Window中有一个frame; 3.frame加载各个page; 3.加载page的时候,new page了,然后frame.navigate(page);...4.返回上一页调用的...ps:现在就是想要每次new page,返回的时候把这个page释放
  • WPF内存优化

    2019-06-20 09:07:06
    问题 之前前员工做的一个WPF项目,运行时程序的占用内存总是不断增长,最后能把电脑的内存空闲内存全部占用,程序变得越来越卡...[WPF]解决程序运行时间长后内存占用太大(可能是泄漏),加个内存回收释放 看看内容,...
  • 在NuGet找到Lierda.WPFHelper库,添加到项目中,重载程序启动方法 public partial class App : Application { LierdaCracker cracker = new LierdaCracker();... } } 在播放多个视频画面程序中内存下降非常明显。
  • WPF中的释放内存(持续添加中....)

    千次阅读 2011-01-05 15:41:00
    然后在释放这个类时在一个函数中把变量和事件全给释放掉.例如:public WebClient wc=null;public void Myinit(){ wc=new WebClient(); wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_...
  • WPF 简单的内存优化

    千次阅读 2018-07-12 10:07:53
    WPF内存问题困扰了很久.众所周知,如果长时间使用WPF的程序,它的内存占有将会持续增长。甚至持续的点击一个Button...首先,感谢网友的分享:http://www.dotnetdev.cn/2010/04/wpf内存释放解决方案/这个方法的意思...
  • public static BitmapImage LoadImageFreeze(string imagePath){try{bitmap = new BitmapImage();if (File.Exists(imagePath)){bitmap.BeginInit();bitmap.CacheOption = BitmapCacheOption.OnLoad;...
  • public static BitmapImage LoadImageFreeze(string imagePath) { try { bitmap = new BitmapImage(); if (File.Exists(imagePath)) ...
  • 相信用过WPF的BitmapImage的,都在用类似这样的代码来解决文件无法删除的问题!如果看看msdn上简单的描述,可以看到这样的说明:如果 StreamSource 和 UriSource 均设置,则忽略 StreamSource 值。如果要在创建 ...
  • 相信用过WPF的BitmapImage的,都在用类似这样的代码来解决文件无法删除的问题!如果看看msdn上简单的描述,可以看到这样的说明:如果 StreamSource 和 UriSource 均设置,则忽略 StreamSource 值。如果要在创建 ...
  • GC 回收WPF 内存 C#通用

    千次阅读 2012-03-22 10:01:04
    public class FlushMemory  {  [DllImport("kernel32.dll")]  public static extern bool SetProcessWorkingSetSize(IntPtr proc, int min, int max);  ///  /// 释放内存
  • WPF/Silverlight应用程序长时间运行后会产生非常多的内存垃圾(内存泄露例外),特别是在经常需要进行Remove操作的粒子、动画、游戏等方面的应用,国外高手们提出的方案我归纳了一下主要有: 1) UIElement控件...

空空如也

空空如也

1 2 3 4
收藏数 80
精华内容 32
关键字:

wpf释放内存