我最近优化了我的函数,该函数使用 Parallel For 循环将一些值插入到 excel 工作簿中(我必须在循环中比较大约 500000 个值)。如果我使用简单的 for 循环,一切对我来说都很好,但是如果我开始使用 Parallel For 语句,我没有错误并且代码工作正常,但是在 excel 工作簿中插入的值不像预期的那样(在不同的行中,不像我使用简单的 for 循环)。
这是我的代码示例,请您帮我寻找解决方案。
Parallel.For(0, DestinationListIDArray.Count, (int i) =>
{
for (int j = 0; j < SourceListIDArray.Count; j++)
{
if (DestinationListIDArray[i].ToString() == SourceListIDArray[j].ToString() && DestinationListIDArray[i].ToString() != "НД")
{
int c = 1;
int summ = i + c;
string forB = summ.ToString();
string forC = summ.ToString();
DestrangeH = myExcelWorksheetDestination.get_Range(TEXTBOX_FIO_DESTINATION.Text + forB);
DestrangeI = myExcelWorksheetDestination.get_Range(TEXTBOX_DEST_DOLZHNOST.Text + forC);
DestrangeH.Interior.Color = System.Drawing.ColorTranslator.ToOle(COLORDIALOG_INF1_BACKGROUNDCOLOR.Color);
DestrangeH.Font.Color = System.Drawing.ColorTranslator.ToOle(COLORDIALOG_INF1_FOREGROUNDCOLOR.Color);
DestrangeI.Interior.Color = System.Drawing.ColorTranslator.ToOle(COLORDIALOG_INF2_BACKGROUNDCOLOR.Color);
DestrangeI.Font.Color = System.Drawing.ColorTranslator.ToOle(COLORDIALOG_INF2_FOREGROUNDCOLOR.Color);
//DestrangeH.set_Value(Missing.Value, SourceArray[j - 2].ToString());
//DestrangeI.set_Value(Missing.Value, SourceArray[j - 1].ToString());
DestrangeH.set_Value(Missing.Value, SourceListFIOArray[j].ToString());
DestrangeI.set_Value(Missing.Value, SourceListDolzhArray[j].ToString());
}
}
});
我正在使用 List 数组,并且我在某处读到 List 泛型不是线程安全的,这可能会让我遇到麻烦。如果是这样,您能建议我使用哪种动态数组以及如何在插入前锁定。谢谢..