性能优化- 多线程异步IO操作
程序员文章站
2022-07-02 22:55:08
...
程序启动太慢,有很多原因,例如:一次性启动太多窗口;IO操作等待,一次性加载所有Excel文件;数据库访问延迟;不合理的代码逻辑,创建太多对象;内存不足使用;等等。
打开一个程序,如果资源放在窗口的main线程中加载,那会多增加一些时间,对于一些数据资源比较庞大的程序来说,可能需要几分钟。也就是说,你得要等几分钟,才能使用这个软件,等到花儿都谢了。。。
解决办法:使用多线程,异步处理io操作,将资源加载放在子线程里执行。
程序启动的时候,子线程就开始加载资源,等加载完了设置一个成功标志,以后如果要加载,就先判断缓存。在这种模式下,用户就可以进行他们自己的操作,而不用等待了。
把这个思路在目前的项目中应用了一下,打开时间从2分钟减低到了25秒。(感谢万老师的指点。)
c#多线程结构:
public static void CallToChildThread()
{
Console.WriteLine("Child thread starts");
//load task ..
xxfunc();
}
static void asyncLoad()
{
ThreadStart childref = new ThreadStart(CallToChildThread);
Thread childThread = new Thread(childref);
childThread.Start();
Console.ReadKey();
}
在使用多线程的过程中,得要注意互斥同步问题,使用lock 关键字来解决。
private static object oLock = new object();
private static void Test2(object Count)
{
lock (oLock)
{
// do your task
}
}
参考资料:
c# 界面异步加载
https://bbs.csdn.net/topics/390675047
C# 多线程
https://www.runoob.com/csharp/csharp-multithreading.html
解析C#多线程编程中异步多线程的实现及线程池的使用
https://www.jb51.net/article/80542.htm
上一篇: windows 小技巧
下一篇: 性能优化