C#在循环内多次重新初始化数组
Posted
技术标签:
【中文标题】C#在循环内多次重新初始化数组【英文标题】:C# Reinitialize an array multiple times inside loop 【发布时间】:2021-05-31 01:38:55 【问题描述】:我目前正在处理一个处理多字节数组的项目。在一种情况下,可能会在 while 循环中多次重新初始化数组。发生这种情况的唯一原因是应用程序正在接收读取请求,但接收到的信息不正确。
我必须有一个“干净的”字节数组才能写回设备,表明信息不正确。被读取的设备倾向于跳入“循环”,在该循环中它不断发送“不正确”的数据,直到与之交互,这不是问题。只要知道设备发送垃圾读取请求目前不是问题,并且会在未来得到处理。
我的问题是: 长时间在 while 循环内重新初始化数组时是否存在任何性能/编码问题?例如 10000+ 次迭代
代码示例:
byte[] array = new byte[500]
while(condition)
// Some work
array = new byte[500]
Thread.Sleep(100);
// Some work
【问题讨论】:
也许这适合您的需求? docs.microsoft.com/en-us/dotnet/api/… 这似乎也很有帮助 - ***.com/questions/29175124/… @RandRandom ArrayPool 正在寻找我需要的答案,我将尝试使用它并回来告诉你。Thread.Sleep(100);
远远更长然后new byte[500]
或Array.Clear(array, 0, array.Length);
@DmitryBychenko - 如帖子中所述,使用10000+
迭代,这将总计大约 16 分钟的睡眠时间,我相信 OP 只是想显示“一些代码”存在。
【参考方案1】:
如果数组没有改变,你可以简单地清除数组(https://docs.microsoft.com/de-de/dotnet/api/system.array.clear?view=net-5.0):
Array.Clear(array, 0, array.Length);
为了节省性能,您还可以异步运行函数。
【讨论】:
OP 标记为[multitasking]
,所以我觉得清除共享数组可能是个坏主意。以上是关于C#在循环内多次重新初始化数组的主要内容,如果未能解决你的问题,请参考以下文章