首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不同机器上执行相同API的时间差

在不同机器上执行相同API的时间差
EN

Stack Overflow用户
提问于 2019-05-03 14:37:59
回答 2查看 49关注 0票数 1

我的C#应用程序使用C++库中的API进行图像处理。我需要一次处理六个图像,因为这六个对象可用于此。当图像准备好处理时,它将被分配到线程池中的线程。下面的代码用于此。

代码语言:javascript
复制
ThreadPool.QueueUserWorkItem(ThreadPoolCallback, imageTuple);

在"ThreadPoolCallback“中,正在调用图像处理接口。

就我的问题而言,在我的开发笔记本电脑上,仅执行API的时间就是3- 3.5秒。但是,当同样的代码在自动化系统中执行时,其IPC具有更好的规范,API执行时间为8-9秒。

我的开发机器有8核处理器和16 GB内存,自动化系统中的IPC有14核处理器和32 GB内存。

我已经检查了一些基本的东西,比如内存激增,cpu利用率变高等等。但他们中的任何一个都没有表现出任何值得担忧的地方。两个系统的唯一区别是IPC安装了NI Labview安装程序。

寻找一些建议来改善我的并行执行时间。我是否可以使用专用核心或其他任何核心。

提前感谢

代码语言:javascript
复制
ThreadPool.QueueUserWorkItem(ThreadPoolCallback, imageTuple);

public void ThreadPoolCallback(Object threadContext)
        {
            try
            {

                var result = visionProcessingUnit.ExecuteInspection(imageTuple.Item3, imageTuple.Item2.ImageData, VIBitmap.Width, VIBitmap.Height);;
            }
            catch (Exception ex)
            {
                Logger.Exception("VisionHandler.cs", ex);

            }
        }
EN

回答 2

Stack Overflow用户

发布于 2019-05-03 14:57:53

首先,你应该确保你的实时系统能更快地处理6个线程。您可以在两个系统上下载并解压缩7zip,然后从命令行运行一个包含6个线程的小基准测试:

代码语言:javascript
复制
7z b -mmt6
票数 0
EN

Stack Overflow用户

发布于 2019-05-03 15:11:47

CPU线程不适合长时间运行的任务,可能会被一些net框架占用。processes.Usually线程池中每个ThreadPool有250个线程。此外,您还可以检查是否锁定了方法中的某些代码,从而阻塞了线程池调度。

如果任务很耗时,我建议您不要使用线程池线程。

下面是您可以使用的两个选项,这两个选项将使用新线程而不是线程池。

代码语言:javascript
复制
var imageTuple = "blqhblah";
Task.Factory.StartNew(() => ThreadPoolCallback(imageTuple),TaskCreationOptions.LongRunning);

代码语言:javascript
复制
 var thread=new Thread(()=>ThreadPoolCallback(imageTuple));
 thread.Priority = ThreadPriority.AboveNormal;
 thread.Start();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55964462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档