我正在處理大文件,並使用一些算法從MatLab轉換爲dll。其中之一是entropy.m。我轉換它的DLL,並在C#中使用它。如你所知,它需要MWArray來執行計算。我將數據存儲爲段。填寫段爲MWNumericArray
。計算段的熵然後清除MWNumericArray
。但是這個過程太慢了。我能做些什麼來提高程序的性能? 這裏是我的代碼:C#.Net轉換後的代碼性能問題
NAudio.Wave.WaveChannel32 wave = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(open.FileName));
byte[] mainBuffer = new byte[wave.WaveFormat.AverageBytesPerSecond/5];
int read;
int length = (int)wave.Length;
List<MWArray> ent = new List<MWArray>();
MWNumericArray arr1 = null;
EntropyCalculation obj = new EntropyCalculation();
if (file.Length % mainBuffer.Length != 0)
{
int value = (int)(wave.Length/mainBuffer.Length);
length = mainBuffer.Length * value;
}
while (wave.Position != length)
{
List<double> segment = new List<double>();
read = wave.Read(mainBuffer, 0, mainBuffer.Length);
for (int i = 0; i < read/8; i++)
{
segment.Add((BitConverter.ToSingle(mainBuffer, i * 8)));
}
arr1 = segment.ToArray();
MWArray result = obj.entropy(arr1);
ent.Add(result);
arr1 = null;
}
使用'Uint16',而不是'int',爲什麼不創建一個'[]數組segment'直接長'閱讀/ 8' –
謝謝你的建議。如你所說,我改變了代碼。但它仍然太慢。可能'obj.entropy(arr1)'需要很長時間來計算。 – Blast
要知道的唯一方法是使用'StopWatch'並以不同的時間間隔放置不同的調試輸出 –