Cache
Cache:也就是缓存,也是服务器的一种状态保持机制,存在服务器的内存中。
虽然Cache与Session都是存在服务器的内存中,但是它们差别却很大:
1)Cache是所有用户共享的,Session是属于每个单独用户的
2)Cache也可以指定过期时间,如果不指定,那么只要服务器不挂,Cache就会一直存在;而Session默认有一个过期时间,一般是20分钟
Cache的方法
1. 指定缓存的过期时间:
Cache.Insert();
2. 移除缓存:
Cache.Remove("userInfoList");
跨线程访问
1. 线程的创建
//括号中是线程要执行的方法
Thread myThread = new Thread(threadStart);
myThread.Start();
2. 线程的一些属性
//设置线程的优先级
myThread.Priority = ThreadPriority.Highest;//建议操作系统将创建的线程优先级设置为最高。
//给线程设置一个名字
myThread.Name = "";
//设置线程为后台线程
//如果不设置为后台线程,假如应用程序退出的时候,线程并不能完全退出
myThread.IsBackground = true;
3. 线程的一些方法
//强行终止线程,一般不要用这个方法,太暴力
myThread.Abort();
//阻塞UI的主线程,单位是毫秒,如果主线程等待一定时间后,线程还没执行完,则主线程将不再等待而继续执行
myThread.Join(1000);
4. 跨线程访问
/// <summary>
/// 跨线程访问
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button4_Click(object sender, EventArgs e)
{
Thread thread1 = new Thread(ShowResult);
thread1.IsBackground = true;
thread1.Start();
}
private void ShowResult()
{
int a = 0;
for (int i = 0; i < 600000000; i++)
{
a = i;
}
//是否要对文本框进行跨线程访问。
if (this.textBox1.InvokeRequired)
{
//Invoke:去找创建TextBox的线程(主线程(UI线程)),由主线程完成委托方法的调用。
this.textBox1.Invoke(new Action<TextBox, string>(ShowTextBoxValue), this.textBox1, a.ToString());
}
else
{
this.textBox1.Text = a.ToString();
}
}
private void ShowTextBoxValue(TextBox txt,string value)
{
txt.Text = value;
}
5. 线程池
为什么要用线程池?
线程创建非常消耗资源,且线程创建非常慢,占用大量的内存空间,每个线程最少1M内存开销。而直接从线程池取要比创建线程快。不过从线程池取出的线程都是后台线程,且优先级都是Normal,无法设定它的优先级。
从线程池中取线程:
ThreadPool.QueueUserWorkItem(WaitCallback callBack, object state);
什么时候用线程池?什么时候用手动创建线程?
1)能用线程池的就用线程池
2)我们想手动关闭线程的话那么必须手动创建了。
3)我们需要对线程池的线程的优先级做设置的情景下,只能使用手动创建线程。
4)如果执行的线程执行时间特别长,建议手动创建线程。