c# - 提高 C# 代码的性能

标签 c# performance multithreading

如何提高以下情况的性能?

我有一个应用程序接受跨网络的多个连接。该应用程序是用 C# 编写的,并接受套接字连接。每五分钟,应用程序需要执行一次函数调用来更新应用程序并将信息报告回套接字。截断代码如下

...
{
    new Thread(Loop).Start();
}

public Loop()
{
    ...
    while (true)
    {
        ...
        string line = user.Read();
        ...
    }
    ...
}

上面的代码是当 Socket 连接到服务器时运行的代码。 以下代码每五分钟运行一次。

...
{
    new Thread(TryTick).Start();
}

public void TryTick()
{
    while(true)
    {
        Tick();
        Thread.Sleep(new TimeSpan(0, 5, 0));
    }
}

Tick() 执行一些文件 I/O 操作以及解析一组非常有限(小于 1MB)的 XML 数据。然而,这段代码对我的处理器的负担比我想象的要大。一旦滴答作响,系统就好像捕获了我双核开发机的一整个Core,不放手。这似乎是一件相当简单的事情,但也许我是在用简单的方法而不是快速的方法来做。

该系统旨在处理多达 100 个用户、更多数据并且在加载期间的响应时间不到 1 秒,因此性能是一个问题。

最佳答案

在决定做什么之前,您确实需要分析这段代码。 . .如果您无权访问分析器,请添加简单的检测以确定瓶颈所在。从计时 Tick() 开始以验证它是问题的根源(而不是程序中的其他地方),然后根据需要重复 Tick() 的子部分。

您确实需要在此处进行剖析和测量。 . .假设您的性能问题出在哪里可能会导致您浪费大量时间。

关于c# - 提高 C# 代码的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/554729/

相关文章:

c# - 如何旋转 System.Drawing.Image x 度?

c# - 编写分析 XML 数据的递归方法

android - 为什么android模拟器不断增加 "Size on Disk"?

c - 使用线程在数组中查找最大值?

c# - 如何读取我的程序中另一个应用程序正在使用的内存量?

c# - Azure 文件存储 SMB 列出目录中的文件速度很慢

.net - 使用互锁

.net - 使用 SQL Server CE 4.0 和 Entity Framework 4.2 进行批量插入的性能非常差

c++ - 在 C++ 中使用 pthread 杀死其中一个线程时,如何使进程保持事件状态?

c - fork() 是否为子进程创建了父进程创建的所有变量和对象的重复实例?