當我的機器負載過重時,我的線程代碼出現錯誤。當機器輕載時不會發生錯誤。我使用VS 2013,C#5.0和.NET 4.51。在線程代碼中複製列表時出錯
代碼如下:
private static readonly Object lockGetData = new Object();
public static void GetData(string symbol, out List<Tuple<double, double>> velocityLine)
{
try
{
lock (lockGetData)
{
mData = mSymbols[symbol];
Debug.Assert(mData != null, "Oh crap! mData is null");
velocityLine = new List<Tuple<double, double>>(mData.velocityLine);
return;
}
}
catch (Exception ex)
{
DebugPrint("GetData error.\n" + ex.Message, symbol);
velocityLine = new List<Tuple<double, double>>();
return 0.0;
}
}
我上線得到一個錯誤:
velocityLine = new List<Tuple<double, double>>(mData.velocityLine);
的錯誤消息是:「目標數組不夠長檢查destindex和長度,和數組的下限。「
當發生錯誤,並且當我檢查「velocityLine」的長度時,它是空的。
我不明白爲什麼我得到這個錯誤。任何幫助或建議將不勝感激。
查爾斯
長度不能爲空......但是你是否在其他線程中修改了'mData.velocityLine'? '列表'不是線程安全的。 –
調查['BlockingCollection'](http://msdn.microsoft.com/en-us/library/dd267312%28v=vs.100%29.aspx)這是線程安全的 – grabthefish
此外,你不能返回'0.0 'void method' –