System.Threading.Thread를 사용하여 C# .NET 1.1에서 Ticker 구성 요소 (System.Windows.Forms.UserControl)를 만들었습니다. 이 티커는 오른쪽에서 왼쪽으로 스크롤하고 xml 피드에서 데이터를 읽습니다. 이 구성 요소는 비디오 및 다른 프로세스가 실행중인 메인 애플리케이션에서 호출됩니다.C# .NET 1.1의 티커 구성 요소에서 CPU 사용 제한
티커 구성 요소없이 응용 프로그램을 테스트하면 CPU 최대 55 %가 소모되지만 티커 구성 요소를 통합하면 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
필자는 실제로 스크롤 속도를 얻기 위해 20ms로 설정했습니다. –