惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

www.infosecurity-magazine.com
www.infosecurity-magazine.com
Security Archives - TechRepublic
Security Archives - TechRepublic
TaoSecurity Blog
TaoSecurity Blog
Cloudbric
Cloudbric
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
N
News and Events Feed by Topic
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Securelist
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
D
DataBreaches.Net
S
Schneier on Security
L
LangChain Blog
Jina AI
Jina AI
M
MIT News - Artificial intelligence
Recent Announcements
Recent Announcements
T
Tenable Blog
B
Blog RSS Feed
V
Visual Studio Blog
Simon Willison's Weblog
Simon Willison's Weblog
G
Google Developers Blog
T
The Exploit Database - CXSecurity.com
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
WordPress大学
WordPress大学
W
WeLiveSecurity
I
InfoQ
The Hacker News
The Hacker News
雷峰网
雷峰网
月光博客
月光博客
P
Privacy & Cybersecurity Law Blog
O
OpenAI News
Hacker News: Ask HN
Hacker News: Ask HN
T
Threat Research - Cisco Blogs
GbyAI
GbyAI
The Last Watchdog
The Last Watchdog
P
Privacy International News Feed
Cyberwarzone
Cyberwarzone
S
SegmentFault 最新的问题
L
Lohrmann on Cybersecurity
人人都是产品经理
人人都是产品经理
V
V2EX
V
Vulnerabilities – Threatpost
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
C
Cybersecurity and Infrastructure Security Agency CISA
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Troy Hunt's Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
阮一峰的网络日志
阮一峰的网络日志
SecWiki News
SecWiki News
Microsoft Azure Blog
Microsoft Azure Blog

博客园 - edobnet

phonegap 开发初探 .net C# ADC接口中DES加密算法 阿里软件接口开发基础(淘宝网) C# SQL 2005自动备份文件删除 短信猫与中国移动CMPP2。0收发短信实例 通过OSQL命令执行SQL SERVER批SQL 针对sql 2005优化的高性能分页存储过程 .net framework 2.0以上修改config配制更容易 - edobnet LinQ操作汇总(From CSharpSamples) 远程注册表读取,与多线程池的应用. 使用JAVASCRIPT控制,IFAME的内容,从而使用投票点击等功能 ADSL自动断拨号类 类拟EXCEL表格锁定的功能的实现! - edobnet - 博客园 线程,线程数控制! sql Server 2000 分区视图的运用 google 中国编程大赛测试题,及自己的解答 触发器在增量同步数据的运用. 进程服务编写,与启动停止控制 js异步XMLhttpPost,并带有,等待显示,防正,XMLhttpPost请求时间过来,而使浏览器死掉! - edobnet - 博客园
利用.Net 线程池提高应用程序性能.
edobnet · 2005-11-29 · via 博客园 - edobnet

  
            通常在大数据量计算的应用程序里,CPU大部分时间处理等待状态.在一个单线程的应用程序里,这些查询会导致window消息处理能力阻塞,这里会导致计算时间很长,CPU利用率也非常低.
           最近一直在研究,提高处理性能的方法.
            开始利用,多线程,异步的方法来实现,
            下面的语句是用来分段进行数据整合, (如按天,或按月,对中间数据进行整合)整合SQL通过批量生成
            在单线程的执行时间,CPU利用率一般在1-10%,(服务器HP 580 4 CPU XEON 3.0G 16G内存,加盘柜),这样整合时间太长。
          如果分段整合,CPU利用率就在40-80%得到比较大的利用。

    FileInfo[] files;
        
private void button1_Click(object sender, System.EventArgs e)
        
{
            
if(folderBrowserDialog1.ShowDialog() == DialogResult.OK)
            
{
                System.IO.DirectoryInfo di 
= new DirectoryInfo(folderBrowserDialog1.SelectedPath);
                files 
= di.GetFiles();
            
                
                ThreadStart ts 
= new ThreadStart(start);
                Thread thread 
= new Thread(ts);
                thread.Start();
                
                
            }

        }

        
public  delegate string myMethodDelegate( object[] args);
        
static int t = 0;
        
void start()
        
{
            
foreach(FileInfo file in files)
            
{
                System.IO.StreamReader sr 
= new StreamReader(file.FullName,System.Text.Encoding.Default);
                
string txt = sr.ReadToEnd();
                sr.Close();
                myMethodDelegate ddd
= new myMethodDelegate(Work2);
                ddd.BeginInvoke(
new object[]{txt_connectString.Text,txt,file.FullName},new AsyncCallback(EndWorkBack), null);

                Write(
string.Format("T:{0}|{1}   {1}\r\n",DateTime.Now,file.FullName,t));
        
                
//_Task.StartTask(new TaskDelegate(_Task.Work2),new object[]{txt_connectString.Text,txt});
                
            }

            
        }

        
public string Work2( object[] args)
        
{
            
using(SqlConnection conn = new SqlConnection(args[0].ToString()))
            
{
                
using(SqlCommand comm = new SqlCommand(args[1].ToString(),conn))
                
{
                    comm.CommandTimeout 
= 60000;
                    conn.Open();
                    comm.ExecuteNonQuery();
                }

                conn.Close();
            }

            
return args[2].ToString();

            
        }

        
int i =0;
        
protected void EndWorkBack( IAsyncResult ar ) 
        

            myMethodDelegate ddd 
= (myMethodDelegate)ar.AsyncState; 
            
string result = ddd.EndInvoke( ar ); 
            i
++;
            Write(
string.Format("T:{3}:{2}:{0}    {1}\r\n",result,DateTime.Now,i,t));
        }
 
        
public void Write(string msg)
        
{
            System.IO.StreamWriter sw 
= new StreamWriter("C:\\install.log",true,System.Text.Encoding.Default);
            sw.WriteLine(msg);
            sw.Close();

        }

         不过上面程序也有一点问题,就是异步线程数据没有好的控制。如果同时执行线程,过多,CPU时间片分配就不合理,执行速度反而慢。
    后来就一直想用线程池的来合理处理线程。
         。Net自带的线程池使用起来比较简单。
       通过System.Threading.ThreadTool类就可以使用,
    定义回调方法
            WaitCallback async = new WaitCallback(FExeute);
        通过ThreadPool.QueueUserWorkItem(async,service);加入队列
        回调方法执行运算
        

public  void FExeute(object Param)
        
{
            
//myResetEvent.WaitOne();
            using(TG_EvaluteBaseDatasSet service = (TG_EvaluteBaseDatasSet)Param)
                  
{
                service.doResult();
                writeFile(Path,service)    ;
                OnTgReport(
new ReportEvent(service.TE_PASS_RANGE,service.TE_YEAR,service.TE_MONTH,int.Parse(service.TE_I_E_FLAG),int.Parse(service.TE_ENTRY_TYPE)));
            }

            Interlocked.Decrement(
ref number);
            
//number--;
            
        }

    其中Interlocked.Decrement,是调用原子操作,进行减操作,
            Interlocked.Increment(ref number);是调用原子操作,进行加
    原子操作在多线程中不会有冲突。
          线程池有几点好处,
        1。多线程执行,
        2。根据CPU个数,性能等,合理安排执行的线程,(在实际操作过程中,通过SQL SERVER企业管理器中查看当前活动的进程数,可以看到当前正在执行的线程数)
        3。异步操作。
       相关资源:
       http://www.ddvip.net/program/c-/index2/15.htm
        http://www.codeproject.com/csharp/threadtests.asp
        http://www.microsoft.com/china/MSDN/library/netFramework/netframework/NECLRT.mspx

    源码下载:
            https://files.cnblogs.com/edobnet/Report.rar