C#Windows服务线程处理提高了性能

时间:2016-02-20 21:44:37

标签: c# multithreading performance

我们开发了Windows服务,使用线程来使用数据库记录(通常是.Net 2.0)。节目下的代码块。

for(int i=0;i<ThreadCount;i++)
{
   ParameterizedThreadStart pts=new ParameterizedThreadStart(MyCode.DoWork)
   Thread t=new Thread(pts);
    t.Start(someObject);
}

ThreadCount读取app.config.MyCode.DoWork(Object someObject)代码块选择SQL Server中的一些数据,以及一些操作。除了我们调用sp,并且查询包含with(rowlock)vs。

while(someObject.Running)
{
   */select some data
}

主要问题是如何改进我的Windows服务。一些与手动创建线程相关的文章增加了CPU成本与如何提高我的应用程序性能。如果我使用并行任务库带来任何优势。创建一个任务而不是创建thread.Does Task手动创建线程以查看可用的CPU数量,或者我转换为like。

for(int i=0;i<ThreadCount;i++){

   Task t=new Task(=>MyCode.Work());
}

2 个答案:

答案 0 :(得分:1)

要提高应用程序的性能,您需要找出缺少性能的位置,以及缺少性能的原因。不幸的是,我们无法为您做到这一点,因为它需要访问正在运行的C#和SQL代码。

我建议使用分析器工具(我使用Redgate's tool)或向应用程序添加分析代码进行一些性能分析。一旦你看到了瓶颈,就可以对造成它们的原因进行理论分析。

我首先从数据库开始 - 查看缓存的执行计划,看看是否有任何线索。尝试与服务分开运行存储过程。

答案 1 :(得分:0)

使事情更简单,并假设Windows服务是唯一访问数据库的客户端。 1.尝试从一个线程访问数据库。假设在访问数据时存在争用,这可以减少db表上的锁争用。 2.将检索到的数据放入队列并让TPL任务处理数据以利用所有CPU核心,假设您的性能瓶颈是cpu 3.然后购买尽可能多的cpu核心。

这是一种直观的模式,其中有许多假设。您需要分析和分析您的程序,以了解这是否合适。