我使用System.Threading.Thread在C#.NET 1.1中創建了一個Ticker組件(System.Windows.Forms.UserControl)。此代碼將從右向左滾動並從XML Feed中讀取數據。我們的主應用程序將使用視頻和其他進程運行該組件。限制C#.NET 1.1中Ticker組件的CPU使用率
測試沒有Ticker組件的應用程序會消耗55%的CPU最大值,但是,當集成Ticker組件時,它會高達95%。
我也嘗試過使用System.Windows.Forms.Timer,但結果是一樣的。
XML數據的解析僅由組分的初始化期間發生,並且這裏是示例代碼段將處理股票滾動:
Thread _mainThread;
private void InitTickerThread()
{
_panelHeadlines = (Panel) FindControl("panelHeadlines", this);
if(_panelHeadlines != null)
{
_textWidth = _panelHeadlines.Size.Width;
}
_locXOffset = 0;
_mainThread = new Thread(new ThreadStart(StartScrolling));
_mainThread.Name = "Main Ticker Thread";
_mainThread.Priority = ThreadPriority.Lowest;
_mainThread.IsBackground = true;
_mainThread.Start();
}
private void StartScrolling()
{
while(true)
{
lock(this)
{
_locXOffset -= 1;
if (_locXOffset < -_textWidth) //If entire ticker content has finished scrolling.
{
_locXOffset = 0;
_partnerCtr = 0;
Partner p = _arrListPartners[_partnerCtr] as Partner;
if(p != null)
{
pbPartnerLogo.Image = p.Logo;
_partnerContentWidth = p.ContentWidth - _offsetToChangeLogo;
}
}
else
{
if(_locXOffset < -_partnerContentWidth)
{
_partnerCtr++;
if(_arrListPartners.Count > 0)
{
if(_partnerCtr < _arrListPartners.Count)
{
Partner p = _arrListPartners[_partnerCtr] as Partner;
if(p != null)
{
pbPartnerLogo.Image = p.Logo;
_partnerContentWidth = p.ContentWidth - _offsetToChangeLogo;
}
}
}
}
}
_panelHeadlines.Location = new Point(_locXOffset, 0);
Invalidate();
Thread.Sleep(20);
}
}
}
任何幫助高度讚賞。謝謝!
您的後臺線程每20ms執行一次工作,即每秒執行50次。我建議大幅度降低這一點。 – Lazarus 2011-04-07 08:52:46
我實際上將其設置爲20ms,以達到所需的滾動速度。 – 2011-04-07 10:44:23