我们开发了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());
}
答案 0 :(得分:1)
要提高应用程序的性能,您需要找出缺少性能的位置,以及缺少性能的原因。不幸的是,我们无法为您做到这一点,因为它需要访问正在运行的C#和SQL代码。
我建议使用分析器工具(我使用Redgate's tool)或向应用程序添加分析代码进行一些性能分析。一旦你看到了瓶颈,就可以对造成它们的原因进行理论分析。
我首先从数据库开始 - 查看缓存的执行计划,看看是否有任何线索。尝试与服务分开运行存储过程。
答案 1 :(得分:0)
使事情更简单,并假设Windows服务是唯一访问数据库的客户端。 1.尝试从一个线程访问数据库。假设在访问数据时存在争用,这可以减少db表上的锁争用。 2.将检索到的数据放入队列并让TPL任务处理数据以利用所有CPU核心,假设您的性能瓶颈是cpu 3.然后购买尽可能多的cpu核心。
这是一种直观的模式,其中有许多假设。您需要分析和分析您的程序,以了解这是否合适。