vivo x9微信没有捂脸的表情等表情,为什么

C#中线程占用内存过大解决方法
C#中线程占用内存过大解决方法
项目中用到了多线程,而且是1000线程并发运行,发现内存占用过高,于是对项目里用到的对象逐个测试,发现是线程对象占用内存
Thread[] threads = new Thread[1000];
for(int i = 0; i)
(threads[i] = new Thread(new ThreadStart(delegate()
Thread.Sleep(100000);
})) { IsBackground = true }).Start();
运行以上测试代码,内存使用量瞬间增加1G, 如果数量写到2000+,
直接抛出System.OutOfMemoryException的异常.
---------------------
经查出thread构造函数里有一个 int maxStackSize, //设置线程最大栈空间
再次测试在构造函数中把 maxStackSize设置为1024, 分配5000线程并发运行,
这次只占用了1.3G左右内存
&&&&&&&&&&&&&&&&&&
Thread thread1 = new Thread(new ThreadStart(test),1024);
(事实设置1024实际栈空间并非1024,而是线程自动设置为最小栈空间(测试在200K至400K之间),具体没查这个最小栈空间是多大)
在一般文章中很少见有这个参数被提起.
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。什么是线程生命周期?C#中如何创建及管理线程?了解并掌握Thread类常用的属性及方法
发布日期: 16:11
线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程执行路径往往是有益的,每个线程执行特定的工作。线程是轻量级进程。一个使用线程的常见实例是现代操作系统中并行编程的实现。使用线程节省了 CPU 周期的浪费,同时提高了应用程序的效率。
线程 被定义为程序的执行路径。每个线程都定义了一个独特的控制流。如果您的应用程序涉及到复杂的和耗时的操作,那么设置不同的线程执行路径往往是有益的,每个线程执行特定的工作。 线程是轻量级进程。一个使用线程的常见实例是现代操作系统中并行编程的实现。使用线程节省了 CPU 周期的浪费,同时提高了应用程序的效率。 到目前为止我们编写的程序是一个单线程作为应用程序的运行实例的单一的过程运行的。但是,这样子应用程序同时只能执行一个任务。为了同时执行多个任务,它可以被划分为更小的线程。
线程生命周期开始于 System.Threading.Thread 类的对象被创建时,结束于线程被终止或完成执行时。 下面列出了线程生命周期中的各种状态:
未启动状态:当线程实例被创建但 Start 方法未被调用时的状况。 就绪状态:当线程准备好运行并等待 CPU 周期时的状况。 不可运行状态:下面的几种情况下线程是不可运行的:
已经调用 Sleep 方法 已经调用 Wait 方法 通过 I/O 操作阻塞
死亡状态:当线程已完成执行或已中止时的状况。
在 C# 中,System.Threading.Thread 类用于线程的工作。它允许创建并访问多线程应用程序中的单个线程。进程中第一个被执行的线程称为主线程。 当 C# 程序开始执行时,主线程自动创建。使用 Thread 类创建的线程被主线程的子线程调用。您可以使用 Thread 类的 CurrentThread 属性访问线程。 下面的程序演示了主线程的执行: using System;
using System.Threading;
namespace MultithreadingApplication
class MainThreadProgram
static void Main(string[] args)
Thread th = Thread.CurrentThread;
th.Name = &MainThread&;
Console.WriteLine(&This is {0}&, th.Name);
Console.ReadKey();
} 当上面的代码被编译和执行时,它会产生下列结果: This is MainThread
下表列出了 Thread 类的一些常用的 属性:
下表列出了 Thread 类的一些常用的 方法:
线程是通过扩展 Thread 类创建的。扩展的 Thread 类调用 Start() 方法来开始子线程的执行。 下面的程序演示了这个概念: using System;
using System.Threading;
namespace MultithreadingApplication
class ThreadCreationProgram
public static void CallToChildThread()
Console.WriteLine(&Child thread starts&);
static void Main(string[] args)
ThreadStart childref = new ThreadStart(CallToChildThread);
Console.WriteLine(&In Main: Creating the Child thread&);
Thread childThread = new Thread(childref);
childThread.Start();
Console.ReadKey();
} 当上面的代码被编译和执行时,它会产生下列结果: In Main: Creating the Child thread
Child thread starts
Thread 类提供了各种管理线程的方法。 下面的实例演示了 sleep() 方法的使用,用于在一个特定的时间暂停线程。 using System;
using System.Threading;
namespace MultithreadingApplication
class ThreadCreationProgram
public static void CallToChildThread()
Console.WriteLine(&Child thread starts&);
// 线程暂停 5000 毫秒
int sleepfor = 5000;
Console.WriteLine(&Child Thread Paused for {0} seconds&,
sleepfor / 1000);
Thread.Sleep(sleepfor);
Console.WriteLine(&Child thread resumes&);
static void Main(string[] args)
ThreadStart childref = new ThreadStart(CallToChildThread);
Console.WriteLine(&In Main: Creating the Child thread&);
Thread childThread = new Thread(childref);
childThread.Start();
Console.ReadKey();
} 当上面的代码被编译和执行时,它会产生下列结果: In Main: Creating the Child thread
Child thread starts
Child Thread Paused for 5 seconds
Child thread resumes
Abort() 方法用于销毁线程。 通过抛出 threadabortexception 在运行时中止线程。这个异常不能被捕获,如果有 finally 块,控制会被送至 finally 块。 下面的程序说明了这点: using System;
using System.Threading;
namespace MultithreadingApplication
class ThreadCreationProgram
public static void CallToChildThread()
Console.WriteLine(&Child thread starts&);
// 计数到 10
for (int counter = 0; counter &= 10; counter++)
Thread.Sleep(500);
Console.WriteLine(counter);
Console.WriteLine(&Child Thread Completed&);
catch (ThreadAbortException e)
Console.WriteLine(&Thread Abort Exception&);
Console.WriteLine(&Couldn't catch the Thread Exception&);
static void Main(string[] args)
ThreadStart childref = new ThreadStart(CallToChildThread);
Console.WriteLine(&In Main: Creating the Child thread&);
Thread childThread = new Thread(childref);
childThread.Start();
// 停止主线程一段时间
Thread.Sleep(2000);
// 现在中止子线程
Console.WriteLine(&In Main: Aborting the Child thread&);
childThread.Abort();
Console.ReadKey();
} 当上面的代码被编译和执行时,它会产生下列结果: In Main: Creating the Child thread
Child thread starts
In Main: Aborting the Child thread
Thread Abort Exception
Couldn't catch the Thread Exception
(window.slotbydup = window.slotbydup || []).push({
id: '1063561',
container: s,
size: '230,230',
display: 'inlay-fix'
C# 是一个简单的、现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的。本教程将告诉您基础的 C# 编程,同时将向您讲解 C# 编程语言相关的各种先进理念。本教程有助于初学者理解基础的 C# 编程。在学习完本教程后,您将到达一个中级的 C# 编程水平。C# 编程是基于 C 和 C++ 编程语言的,因此如果您对 C 和 C++ 编程有基本的了解,将有助于您学习 C# 编程语言。
免责声明:以上教程信息由会员自行搜集、整理、发布,内容的真实性、准确性和合法性由发布会员负责。站长学院对此不承担任何责任。18:51 提问
用c#写了个多线程小程序,占用内存不断的增大,虚心求教
cleanDataTimer.Elapsed += new ElapsedEventHandler(CleanData);
cleanDataTimer.Interval = 0.;
cleanDataTimer.Enabled =
Thread addRCSMemoryData = new Thread(new ThreadStart(AddRCSMemoryDeviceData));
addRCSMemoryData.Start();
Thread addRCSDBData = new Thread(new ThreadStart(AddRCSDataBaseDeviceData));
addRCSDBData.Start();
Thread addRCSDBASEGEMENTDeviceDataTimer = new Thread(new ThreadStart(NetDeviceInfo.GetRCSDBASEGMENTNetDeviceData));
addRCSDBASEGEMENTDeviceDataTimer.Start();
Thread addRCSMemoryASEGEMENTDeviceDataTimer = new Thread(new ThreadStart(NetDeviceInfo.GetRCSMemoryASEGMENTNetDeviceData));
addRCSMemoryASEGEMENTDeviceDataTimer.Start();
Thread addRCSDBBSEGEMENTDeviceDataTimer = new Thread(new ThreadStart(NetDeviceInfo.GetRCSDBBSEGMENTNetDeviceData));
addRCSDBBSEGEMENTDeviceDataTimer.Start();
Thread addRCSMemoryBSEGEMENTDeviceDataTimer = new Thread(new ThreadStart(NetDeviceInfo.GetRCSMemoryBSEGMENTNetDeviceData));
addRCSMemoryBSEGEMENTDeviceDataTimer.Start();
Console.WriteLine("按回车键结束程序");
Console.WriteLine(" 等待程序的执行......");
Console.ReadLine();
按赞数排序
线程是不是不停的在分配,分配的资源使用完了,有没有让它自动回收}

我要回帖

更多关于 微信捂脸表情 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信