工程中发现引起的问题:

  结合别的朋友的意见,我的优化思路是:

    1、排查是否内存泄漏

        经过反复查询代码,未发现有内存泄漏(可以自己百度搜索C#内存泄漏的原因)。可以通过任务管理器分析是否有内存泄漏,打开任务管理器-性能-打开资源监视器,然后可以检查CPU、内存、磁盘、网络等信息

    2、排查是否有线程未关闭

        线程未关闭引起的话,开辟线程后在不用时记得

        thread.DisableComObjectEagerCleanup();
                      thread.Abort();

3、另外可以通过控制程序在那些个CPU中使用,从而避免打开不必要的CPU消耗。具体实现代码找度娘。

      参考:Process来控制主线程

      

 public static void SetProcess()
{
Process p = new Process();
p.StartInfo.FileName = System.IO.Directory.GetCurrentDirectory() + "\\Test.exe";
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.UseShellExecute = false;
p.StartInfo.CreateNoWindow = true;
p.Start(); //设置CPU使用数,这里使用了CPU0和CPU1
p.ProcessorAffinity= (IntPtr)(0x0001 | 0x0002);
p.Close();
p.Dispose();
}

    4、CPU的使用率太高的话,线程上可以加上 时间间隔来减少分子,比如你的线程跑的速度是10秒每次和10毫秒每次效果上就完全就不同了(根据电脑的配置不同效果不一样的),或者直接用while(true);l来检测CPU的使用率更能直观看出。

    5、读完垃圾回收机制后,重写做一个垃圾回收处理。比如一个线程中1秒钟强制回收一次。这样处理后代码消耗内存基本稳定了,不会爆表。在没有内存泄漏的情况,推荐这种方式,暴力回收。

代码:

 /// <summary>
/// 获取为关联的进程分配的专用内存量(以字节为kb)。
/// </summary>
/// <returns></returns>
public static long ReadProcessMemory()
{
long usedMemory = ;
try
{
Process proc = Process.GetCurrentProcess();
usedMemory = proc.PrivateMemorySize64 / ;
}
catch (Exception ex)
{
Utils.Log.Log.DataExport("logs", ex.ToString());
}
return usedMemory;
}

  6、SetProcessWorkingSetSize,然后特别注意下https://blog.csdn.net/weixin_30607659/article/details/97205705与http://blog.sina.com.cn/s/blog_49f8960e0100081x.html的说法,现在内存消耗一直是以龟速慢慢增加,又要砸时间搞这事了 。看我C#垃圾回收机制详解https://www.cnblogs.com/wwj1992/p/8387360.html,搞到最后估计大家也会经放弃治疗了。最后 希望看完的朋友有啥好意见可以分享给我,谢谢。

      

最新文章

  1. js-JavaScript高级程序设计学习笔记8
  2. Http Request
  3. GDC2014免费slide整理下载
  4. hive运行的相关配置
  5. 使用java进行文件编码转换
  6. ROW_NUMBER () 与 PARTITION组合拳
  7. flex 错误信息类型及解决方法
  8. SDL2源码分析5:更新纹理(SDL_UpdateTexture())
  9. 你不知道的Eclipse用法:使用Allocation tracker跟踪Android应用内存分配
  10. 如何在java中用Arraylist中实现冒泡排序的问题
  11. Linux系列教程(四)——Linux文件和目录处理命令
  12. Ceph编译安装教程
  13. selenium 定位input输入框下的选择项
  14. [TCP] 网络协议流程图
  15. CompletableFuture基本用法
  16. Three.js里自定义顶点构建三角形面的朝向问题
  17. Python简介(一)
  18. day27(反射之内省机制)
  19. Java编程的逻辑 (42) - 排序二叉树
  20. Direct2D处理几何图形之间的碰撞检测(上)

热门文章

  1. C# 从零开始写 SharpDx 应用 画三角
  2. Flask学习之十二 使用boostrap
  3. deepin golang微服务搭建go-micro环境
  4. Pytorch - GPU ID 指定 pytorch gpu 指定
  5. SDUT-2134_数据结构实验之栈与队列四:括号匹配
  6. SDUT-2133_数据结构实验之栈与队列三:后缀式求值
  7. ashx不能折叠代码,没有智能提示
  8. Android 开源库StickyListHeadersListView来实现ListView列表分组效果
  9. 中国剩余定理(SCAUOJ 1077)
  10. js循环遍历数组(对象)