从c#和mono启动进程时内存不足

时间:2015-11-05 09:19:00

标签: c# linux process mono gpio

我正在安装Debian的嵌入式Linux主板(Atmel AT91SAM)。有一个单声道应用程序正在运行,并且通过使用bash启动一个新的系统进程来调用 cat ,定期打开/关闭GPIO的输出(如每500ms)。一段时间后,我得到一个“ Out of memory ”异常并且输出在一段时间后“恢复”之后一段时间没有设置。

  • 以这种方式设置pioC10这是一个坏主意吗?如果是这样,应该怎么做 我设置了值文件?
  • 可能因为这个内存异常而发生 目前无法访问GPIO?
  • 是否有一种干净的方式来处理这个过程,还是在方法自动关闭时完成?

    private void OnTimer1Event(object source, ElapsedEventArgs e)
    {
            alternateBlinkTimer1.Stop();
            alternateBlinkTimer2.Start();
        try
        {
            var processStartInfo = new ProcessStartInfo { FileName = "/bin/bash", Arguments = "-c \"echo 1 > /sys/class/gpio/pioC10/value\"" };
            System.Diagnostics.Process process = new Process();
            process.StartInfo = processStartInfo;
            process.Start();
        }
        catch (Exception err)
        {
            log.Error(err.Message);
        }
    }
    

1 个答案:

答案 0 :(得分:2)

您可以尝试直接使用libc的system来跳过Process Class和与之关联的任何内存管理/垃圾回收。

在您定义OnTimer1Event方法的班级中,向system添加定义:

   [DllImport ("libc")]
   private static extern int system (string exec);

然后你可以:

private void OnTimer1Event(object source, ElapsedEventArgs e)
{
        alternateBlinkTimer1.Stop();
        alternateBlinkTimer2.Start();
        system("echo 1 > /sys/class/gpio/pioC10/value\");
}