标签: process

使用过程的内存不足

好的,所以我知道我应该使用ImageMagick DLL ......我正在学习,测试并努力做到这一点.但与此同时,我正在使用通过一个进程调用Imagemagick的convert.exe的低效方法.

当我测试时,它可以正常处理数百张图像.但后来我将我的WindowsForms程序移动到更快的机器上,并且每次都在同一点崩溃.

这是一个两步过程调用.第一次循环遍历所有文件并生成PNG.然后我循环遍历所有PNG并将其与背景合成并输出JPG.但是每次正好在22个图像上出现错误"System.OutOfMemoryException:Out of memory".有什么东西可以填满,我需要杀死什么?

    foreach (string file in files)
            {
                try
                {
                    string captureImg = Path.GetFileName(file);
                    string maskImg = file.Replace("X.JPG", "Y.JPG");
                    string OutputImage = string.Format("{0}.png", Path.GetFileNameWithoutExtension(captureImg));
                    string output = Path.Combine(destFolder, OutputImage);
                    //MessageBox.Show(output);
                    progressBarImage.Value = progressBarImage.Value + 1;
                    lblStatus.Text = string.Format("Image {0} of {1}", progressBarImage.Value, maxFiles);
                    makePNG(file, maskImg, output);
                    Application.DoEvents();

                }
                catch (Exception)
                {
                }
            }

            if (chkBG.Checked)
            {
                //try
                //{
                    string JPGdir = Path.Combine(destFolder, "JPGs");
                    string[] PNGfiles = Directory.GetFiles(destFolder, "*C.PNG");

                    lblProgress.Text = "Generating JPGs with …
Run Code Online (Sandbox Code Playgroud)

c# process imagemagick-convert

0
推荐指数
1
解决办法
409
查看次数

在默认图像查看器中打开和关闭图像

我正在尝试创建一个在默认图像查看器中打开图像的简短方法,并在time几毫秒后关闭它.

现在它看起来像这样:

    public static async void OpenImage(string path, int time)
    {
        var process = new Process();
        process.StartInfo.FileName = path;
        process.Start();
        await Task.Delay(time);
        process.Kill()
        process.Close()
    }
Run Code Online (Sandbox Code Playgroud)

我可以看到图像,但随后process.Kill()抛出InvalidOperationException"没有进程与此对象相关联".

我错过了什么或者还有其他办法吗?


更新:

现在也测试了这个:

    public static async void OpenImage(string path, int time)
    {
        var process = Process.Start(path)
        await Task.Delay(time);
        process.Kill()
        process.Close()
    }
Run Code Online (Sandbox Code Playgroud)

但后来Process.Start()回归null.所以也许我必须.exe直接打电话给faljbour评论?

c# process

0
推荐指数
1
解决办法
3464
查看次数

理解Perl单线程

我正在研究一种检查AIX上进程内存使用情况的方法,并找到了这个页面,列出了这个命令:

# svmon -Pt15 | perl -e 'while(<>){print if($.==2||$&&&!$s++);$.=0 if(/^-+$/)}'
Run Code Online (Sandbox Code Playgroud)

它适用于我的目的,但我想了解Perl单线器部件的工作原理.

我知道它正在解析svmon命令的输出.我已经理解了$.==2输出第二行的部分.该部分$.=0重置行号,以便它可以对列出的每个进程执行相同的处理svmon.

但是我无法理解这部分内容||$&&&!$s++.有OR.$&是匹配的部分(什么?)和&&是AND运算符,但我不确定我是否正确分解它.

svmon返回(没有任何重定向)每个进程的类似行块.第一行类似于:

# svmon -Pt15 | head -n 20

-------------------------------------------------------------------------------
     Pid Command          Inuse      Pin     Pgsp  Virtual 64-bit Mthrd  16MB
12058652 java            579432     8261   397386   824106      Y     Y     N

     PageSize                Inuse        Pin       Pgsp    Virtual
     s    4 KB               67560        309       1610      40138
     m   64 KB               31992        497      24736      48998

    Vsid      Esid Type Description              PSize  Inuse …
Run Code Online (Sandbox Code Playgroud)

perl aix command-line process

0
推荐指数
1
解决办法
253
查看次数

如何从C#中的另一个进程捕获返回的对象

我有一个ac#程序,它将使用Process.start()调用另一个c#程序,我也有源代码.

我如何从第二个程序返回一个字符串,它可以被调用者程序读取.

谢谢

c# process

0
推荐指数
1
解决办法
150
查看次数

子进程中的stdout和stderr重定向

如果我像这样运行Bash脚本:

./script.sh 2>&1
Run Code Online (Sandbox Code Playgroud)

stderr将被重定向到stdout.

如果脚本在内部调用某个工具(例如ls)或生成一个新进程,这些子进程是否stderr也将它们重定向到stdout

unix bash stdout process stderr

0
推荐指数
1
解决办法
6805
查看次数

操作系统 - 上下文切换

我已经对进程之间的上下文切换问题感到困惑,给定了某个时间片的循环调度程序(这是unix/windows在基本意义上都使用的).

因此,假设我们在一台核心机器上运行了200个进程.如果调度程序使用的是1ms时间片,则每个进程每200ms就会获得一次,这可能不是这种情况(想象一下Java高频应用程序,我不认为它会每200ms调度一次以满足请求).话虽如此,我在图片中遗漏了什么?

此外,java和其他语言允许将正在运行的线程休眠例如100ms.我是否正确地说这不会导致上下文切换,如果是这样,这是如何实现的?

operating-system process context-switch thread-sleep

0
推荐指数
1
解决办法
248
查看次数

单片(vs)微服务==>线程(vs)进程

我有一个单一的应用程序,单个进程有5个线程.每个线程完成某些特定任务.考虑使用docker将此应用程序移至微服务.如果我查看架构,每个工作线程将成为一个docker进程.因此,在我的案例中,Monolithic vs Microservices在某些方面变得更像Thread and Process讨论.

拥有单片的最初想法是拥有性能线程并共享相同的内存.现在有了微服务拱,我被推到了一个可能不适合从性能角度来看的流程模型.

我有点坚持如何处理这个问题.

multithreading process docker microservices

0
推荐指数
1
解决办法
2532
查看次数

c#通知正在运行的进程

是否有可能以某种方式从"外部"通知正在运行的进程?

我有一个理论上永远存在的C#程序.我想通知它手动触发一些动作.如果在Windows和Linux(单声道)上可以使用此解决方案,那将是最好的.

编辑:

  1. 解决方案应该没有用户界面
  2. 我的程序目前是Web服务的一部分.在初始化时,会创建一个新的Theread,它使用Task该类来保持活跃状态

c# process

0
推荐指数
1
解决办法
519
查看次数

如何只在一个CPU上运行C++程序?

我一直在阅读有关如何检查我的机器有多少CPU或内核(MacBook OS X,Sierra,v.10.12,2GHz Intel Core i7),但有许多不同的答案,例如:

如何在Mac OS X上发现*logical*核心的数量?

我需要的是确保我的C++程序只运行一个CPU(如果可能的话,只运行一个核心,即没有调度,即我的程序应该有一个专用的核心来运行=>我'我不确定我的Mac OS X架构是如何组织的.

我不确定这是否应该在实现,编译或执行级别完成.我见过人们谈论tasksetUbuntu,但我不确定这对我来说是否是正确的工具(可能它甚至不适用于Mac OS X).

注意:如果您觉得应该在另一个Stack Exchange网站上询问此问题,请告诉我,我会将其移至那里.实际上我希望我的解决方案是跨平台的,所以也许这不是问这个问题的最佳地方.

c++ cpu process multitasking

0
推荐指数
1
解决办法
643
查看次数

Win32 API:Mutex即使已经发布也会挂起

我正在尝试通过互斥锁建立进程间通信.我有一个过程可以做到这一点:

HANDLE hMutex = CreateMutex(NULL, TRUE, "amutex_name");
if (!hMutex) {
    puts("Error creating mutex. Aborting.");
    return;
}
for (int i = 0; i < 500; ++i) {
    if (WaitForSingleObject(hMutex, INFINITE) == WAIT_FAILED) {
        puts("Error waiting for mutex. Aborting.");
        return;
    }
    if (!ReleaseMutex(hMutex)) {
        puts("Error releasing mutex. Aborting.");
        return;
    }
    puts("MUTEX RELEASED");
    Sleep(2000);
}
CloseHandle(hMutex);
Run Code Online (Sandbox Code Playgroud)

第二个程序(不同的过程)执行此操作:

HANDLE hMutex = CreateMutex(NULL, FALSE, "amutex_name");
if (!hMutex) {
    puts("Error creating mutex. Aborting.");
    return;
}
while (1) {
    if (WaitForSingleObject(hMutex, INFINITE) == WAIT_FAILED)
        continue;
    if (!ReleaseMutex(hMutex)) …
Run Code Online (Sandbox Code Playgroud)

windows winapi mutex process

0
推荐指数
1
解决办法
247
查看次数