我創建了一個Windows窗體應用程序,它讀取文本文件,重新排列數據並寫入新的文本文件。我注意到它在運行時呈指數級減速。我一直在使用跟蹤點,秒錶和日期時間來找出爲什麼每次迭代所花的時間比以前更長,但我無法弄清楚。我最好的猜測是,它可能與我初始化變量的方式有關。我找不出什麼在減慢我的程序的速度
我不知道該代碼片段多大的幫助將是,但也許它會給一些洞察我的問題:
while (cuttedWords.Any())
{
var variable = cuttedWords.TakeWhile(x => x != separator).ToArray();
cuttedWords = cuttedWords.Skip(variable.Length + 1);
sortDataObject.SortDataMethod(variable, b);
if (sortDataObject.virtualPara)
{
if (!virtualParaUsed)
{
listOfNames = sortDataObject.findListOfNames(backgroundWords, ref IDforCounting, countParametersTable);
}
virtualParaUsed = true;
printDataObject.WriteFileVirtual(fileName, ID, sortDataObject.listNames[0], sortDataObject.listNames[1],
sortDataObject.unit, listOfNames, sortDataObject.virtualNames);
sortDataObject.virtualNames.Clear();
}
else
{
int[] indexes = checkedListBox1.CheckedIndices.Cast<int>().ToArray();
printDataObject.WriteFile(fileName, ID, sortDataObject.listNames[0], sortDataObject.listNames[1],
sortDataObject.unit, sortDataObject.hexValue[0], sortDataObject.stringShift, sortDataObject.sign,
sortDataObject.SFBinary[0], sortDataObject.wordValue, sortDataObject.conversions, sortDataObject.stringData, indexes, sortDataObject.conType);
}
decimal sum = ((decimal)IDforCounting)/countParametersTable * 100;
int sum2 = (int)sum;
backgroundWorker1.ReportProgress(sum2);
ID++;
IDforCounting++;
b++;
}
有什麼奇怪的是,我知道,每個循環中運行毫秒級的問題,但從一個循環開始到下一個循環開始,時間不斷增加。
我很抱歉如果沒有足夠的信息來分析我的問題,但我不確定我可以提供什麼,而不顯示我的整個解決方案。
謝謝。
編輯:一個更好的問題可能是:如果秒錶沒有執行技巧,什麼是分析性能的好方法。我寧願不必下載分析器。
內存使用情況如何?如果內存使用量增加很快,那可能是原因。 – Matt
我很確定我已閱讀過有關Skip的潛在性能問題。一種解決方案是使用「Batch」擴展方法(例如https://code.google.com/p/morelinq/source/browse/MoreLinq/Batch.cs?r=f85495b139a19bce7df2be98ad88754ba8932a28)。然而,這是純粹的猜測,因爲我無法明顯地調試你的代碼與你的數據集。 –
@Matt這是一個很好的問題。我會研究一下。我可以跟蹤斷點和/或跟蹤點的內存使用情況嗎? – user2340818