我正在安装Debian的嵌入式Linux主板(Atmel AT91SAM)。有一个单声道应用程序正在运行,并且通过使用bash启动一个新的系统进程来调用 cat ,定期打开/关闭GPIO的输出(如每500ms)。一段时间后,我得到一个“ Out of memory ”异常并且输出在一段时间后“恢复”之后一段时间没有设置。
是否有一种干净的方式来处理这个过程,还是在方法自动关闭时完成?
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);
}
}
答案 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\");
}