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

本文关键字:性能 过程 处理 Windows 服务 线程 | 更新日期: 2023-09-27 18:35:28

我们开发了使用线程来使用数据库记录的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);
}

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

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

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

for(int i=0;i<ThreadCount;i++){
   Task t=new Task(=>MyCode.Work());
}

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

为了提高应用程序的性能,您需要找出性能不足的地方,然后找出缺少性能的原因。很遗憾,我们无法为您执行此操作,因为它需要访问正在运行的 C# 和 SQL 代码。

建议使用探查器工具(我使用 Redgate 的工具)或通过向应用程序添加分析代码来进行一些性能分析。一旦你看到了瓶颈,你就可以对导致它们的原因做出理论。

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

使

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

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