我有一个功能SetCameraChannel,它将根据数据库中的设备数据打开摄像机通道。我测试打开5个频道并且工作正常(虽然大约有400,000K内存)但是如果我打开20个频道,它将导致"无法分配内存"。
是否可以将20个通道分成4个不同的进程(1个进程包含5个通道),当无法打开通道时,它会自动尝试重新打开通道?
或者您是否知道如何在没有内存分配问题的情况下运行20个频道?
private void SetCameraChannel()
{
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(delegate(object state)
{
foreach (DataRow dr in dtFDInfo.Rows)
{
FDCamera fdCameraChannel = null;
url = string.Format("rtsp://{0}:{1}@{2}:{3}/live/video/h264/record/ch{4}?tcp", dr["SourceUserId"], dr["SourceUserPw"], dr["SourceIp"], GetChannelPort(dr), GetDeviceChNum(dr));
if (fdCameraChannel != null)
{
fdCameraChannel.Dispose();
}
fdCameraChannel = new FDCamera(dr["device_name"].ToString(), url, dr);
}
}));
}
答案 0 :(得分:0)
您可以使用AssemblyBuilder和TypeBuilder类从C#动态创建命名进程,并在每个进程内根据需要创建通道,因此内存分配将在不同进程中分割,并且可以正确管理。