当前位置:  开发笔记 > 编程语言 > 正文

Web服务调用的多线程性能问题

如何解决《Web服务调用的多线程性能问题》经验,为你挑选了2个好方法。

这是我的Web服务服务器端和客户端的示例程序.我遇到了一个strnage性能问题,即使我增加调用Web服务的线程数,性能也没有提高.同时,任务管理器性能面板的CPU /内存/网络消耗很低.我想知道什么是瓶颈以及如何改进它?

(我的测试经验,线程数增加一倍,总响应时间几乎翻倍)

客户端:

class Program
{
    static Service1[] clients = null;
    static Thread[] threads = null;

    static void ThreadJob (object index)
    {
        // query 1000 times
        for (int i = 0; i < 100; i++)
        {
            clients[(int)index].HelloWorld();
        }
    }

    static void Main(string[] args)
    {
        Console.WriteLine("Specify number of threads: ");
        int number = Int32.Parse(Console.ReadLine());

        clients = new Service1[number];
        threads = new Thread[number];

        for (int i = 0; i < number; i++)
        {
            clients [i] = new Service1();
            ParameterizedThreadStart starter = new ParameterizedThreadStart(ThreadJob);
            threads[i] = new Thread(starter);
        }

        DateTime begin = DateTime.Now;

        for (int i = 0; i < number; i++)
        {
            threads[i].Start(i);
        }

        for (int i = 0; i < number; i++)
        {
            threads[i].Join();
        }

        Console.WriteLine("Total elapsed time (s): " + (DateTime.Now - begin).TotalSeconds);

        return;
    }
}

服务器端:

    [WebMethod]
    public double HelloWorld()
    {
        return new Random().NextDouble();
    }

乔治,提前谢谢



1> markt..:

虽然您正在创建多线程客户端,但请记住,.NET具有可配置的瓶颈,可同时调用2个单个主机.这是设计的.请注意,这是在客户端,而不是服务器上.

尝试在客户端调整app.config文件:



    

在这篇短文中有更多信息:



2> gbjbaanb..:

我的经验通常是锁定是问题:我曾经有一个大规模并行服务器,它花费了更多时间上下文切换而不是执行工作.

所以 - 检查你的内存并在perfmon中处理计数器,如果你看一下上下文切换及其高(每秒超过4000),那么你就麻烦了.

您也可以检查服务器上的内存统计信息 - 如果它花费所有时间交换,或者只是创建和释放字符串,它似乎也会停止.

最后,检查磁盘I/O,原因与上面相同.

解决方案是移除您的锁,或保持它们至少一段时间.通过消除对COM BSTR及其全局锁的依赖来解决我们的问题,你会发现C#有很多类似的同步瓶颈(旨在保证你的代码安全运行).当我将一个简单的C#应用​​程序从单核移动到多核盒时,我已经看到性能下降.

如果你不能删除锁,最好的选择是不要创建尽可能多的线程:)使用线程池来让CPU完成一个作业,然后再启动另一个.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有