我有一个非常特殊的问题,很难将其分解为几行代码和几句话,但我会尝试这样做。我目前正在开发一种用于实时优化过程工厂警报的软件。每次出现新警报时,软件都会从服务器接收新警报。其中几个警报具有相同的根本原因,我的软件会分析这些警报并将它们分组(如果它们彼此相关)。我的问题是将新警报与旧警报进行比较。我将旧警报存储在一个全局列表中,并在它们出现时将新警报附加到此列表中。必须分析新警报是否可以与其自身和旧警报分组。旧警报无需再次重新组合。例如,我有三个旧的 (o) 警报和三个新的 (n)。该列表看起来像 o1 o2 o3 n1 n2 n3。现在必须将 n1 与 o1、o2、o3、n2 和 n3 进行比较。n2 必须与 o1,o2,o3 和 n3 等进行比较。
我使用以下代码来执行此操作:
List<ALARM_ITEM> puffer = new List<ALARM_ITEM>();
puffer.AddRange(localOldAlarmList);
puffer.AddRange(localNewAlarmList);
localMergedList = puffer;
int mainListCounter = localOldAlarmList.Count;
for (; mainListCounter < localMergedList.Count; mainListCounter++)
{
/*if there are new elements just these elemnts will be used as static items*/
ALARM_ITEM staticAlarmItem = localMergedList[mainListCounter];
for (int j = -1; j <= 1; j += 2)
{
if (j < 0)
counterRunner = localOldAlarmListLength - 1;
else
counterRunner = mainListCounter + 1;
//Check against any ALARM_ITEM in timeframe
bool inTimeframe = true;
while (inTimeframe)
{
if ((counterRunner >= localMergedList.Count) || (counterRunner) < 0)
break;
ALARM_ITEM groupCandidate = new ALARM_ITEM();
groupCandidate = localMergedList[counterRunner];
//... several if clauses
MergeTwoAlarmGroups(staticAlarmItem, groupCandidate);
if (j < 0)
counterRunner -= 1;
else
counterRunner += 1;
}
}
}
现在我该说什么……我修改了这种方法,现在工作了大约 36 个工作小时,但该软件仍然只是比较彼此之间的新警报,而不是将其链接到旧警报。分组算法有几页长,我试图尽可能地分解它。如果有人能给我一个建议,我做错了什么,我会很高兴,因为我对这个问题很生气。这是我第一次真正被困在这个项目中,并且我正在为这个软件编程三个多月。
亲切的问候拉里莫