更新:Andrew和Conrad的答案同樣有幫助。時間問題的簡單修復解決了問題,並緩存了更大的對象引用,而不是每次移除問題源時重新構建它們。感謝您的意見,夥計們。.net部分運行緩慢
我正在使用c#.NET API,出於某種原因,下面的代碼會執行我感覺非常/非常慢的操作。
這是一個System.Timers.Timer的處理程序,它每5秒觸發一次它發生的事件。
private static void TimerGo(object source, System.Timers.ElapsedEventArgs e)
{
tagList = reader.GetData(); // This is a collection of 10 objects.
storeData(tagList); // This calls the 'storeData' method below
}
而且storeData方法:
private static void storeData(List<obj> tagList)
{
TimeSpan t = (DateTime.UtcNow - new DateTime(1970, 1, 1));
long timestamp = (long)t.TotalSeconds;
foreach (type object in tagList)
{
string file = @"path\to\file" + object.name + ".rrd";
RRD dbase = RRD.load(file);
// Update rrd with current time timestamp and data.
dbase.update(timestamp, new object[1] { tag.data });
}
}
我失去了一些明顯的資源池?您看到的RRD內容來自rrdtool的NHawk C#封裝器;在這種情況下,我用它更新了10個不同的文件,但我沒有看到爲什麼它需要這麼長時間。當我說「這麼久」,我的意思是計時器在第一次更新完成之前第二次觸發,所以最終「更新2」會在「更新1」之前發生,因爲「更新1」具有早於「更新2」的時間戳。
我將計時器長度增加到10秒,並且運行時間更長,但仍然最終超出本身並嘗試使用較早的時間戳更新文件。我可以採取什麼不同的做法來提高效率,因爲很明顯,我正在做一些大大的錯誤...
您是否嘗試過分析rrd命令? – Alxandr 2011-05-31 21:08:26
甚至可以剖析讀者......從這段代碼中無法分辨出實際問題。分析整個事情以確定時間花在哪裏。此外,您還想知道文件系統在其他方面的負載情況。 – NotMe 2011-05-31 21:20:52