2011-01-06 5 views
0

차트를 표시하는 작은 웹 응용 프로그램을 만들었습니다. 응용 프로그램의 수퍼 유저가 완전한 데이터 새로 고침을하는 것이 유용 할 수 있다고 생각했지만이 프로세스는 완료하는 데 약 10 분이 걸립니다. 사용자가 새 스레드를 시작하여 데이터 새로 고치기를 시작하는 버튼을 클릭하면 이후 클릭이 스레드를 죽이고 데이터 채우기 프로세스를 다시 시작할 수 있다고 생각했습니다. 그러면 사용자는 데이터가 채워짐에 따라 사이트를 탐색하고 차트를 볼 수 있습니다.C# 웹 응용 프로그램에서 스레드를 어떻게 관리합니까?

이런 식으로 간단한 방법이 있습니까?

답변

1

좋아, 나는 여기에 대답을 사용하지 않았으니 여기 내가 한 것입니다. 후속 클릭이 현재 실행중인 클릭 대신 종료되는 것이 더 좋을 것이라고 결정했습니다. 당신 대답에 감사드립니다.

//code behind 
protected void butRefreshData_Click(object sender, EventArgs e) 
{ 
    Thread t = new Thread(new ThreadStart(DataRepopulater.DataRepopulater.RepopulateDatabase)); 
    t.Start();  
} 

//DataRepopulater.cs 
namespace DataRepopulater 
{ 
    public static class DataRepopulater 
    { 
    private static string myLock = "My Lock"; 
    public static void RepopulateDatabase() 
    { 
     if(Monitor.TryEnter(myLock)) 
     { 
      DoWork(); 
      Monitor.Exit(myLock); 
     } 
    } 
} 
1

ASP.NET을 돌리면 이런 종류의 일을 할 수 있지만 ASP.NET 개발에 대한 몇 가지 일반적인 규칙을 위반하며 서버 팜에서 실제로 문제를 일으킬 수 있습니다.

그래서 가장 확실한 방법은 웹 서비스에서이 작업을 수행하는 것입니다. 원하는 경우 메서드에서 HTML 덩어리를 반환하도록 할 수 있습니다. 상태 메서드를 추가하여 스레드가 어떻게 진행되고 있는지 확인할 수도 있습니다.

+0

좋아, 그래서 DB를 refesh 코드를 WebService에 넣어. 나는 이것을 어떻게 섭취 할 것인가? 클라이언트의 자바 스크립트 또는 서버의 OnClick 이벤트? –

+0

JQuery의 "ajax"메서드는 웹 메서드를 JSON으로 작업하도록 디자인하면 (매우 쉽게) 작동합니다. 포스트 백 및 업데이트 패널은 신중하지 않으면 매우 느려질 수 있으므로 가능한 경우 자바 스크립트를 강력하게 선호합니다. –

1

다른 옵션에는 다음이 포함됩니다. 데이터베이스 서버에 강력한 처리 (예 : OLAP을 사용하는 것이 좋음)를 전달하거나 다른 저렴한 트릭으로 실행되는 예약 된 작업을 실행하는 데 클릭을 설정할 수 있습니다. 서버. 환경에 대한 몇 가지 추가 정보를 제공 할 수 있습니까? 단일 서버? 데이터 스토리지 플랫폼, .net의 버전?

+0

기본적으로 데이터는 여러 오라클 인스턴스의 엉망진창과 공유 드라이브의 일부 CSV 파일에 저장됩니다. 나는 현재 이러한 소스에서 모든 데이터를 가져 와서이를 정리하고 독립형 SQL 2005 서버 상자의 기초적인 별표에 넣는 명령 줄 C# 응용 프로그램 (내 로컬에서 실행 됨)을 가지고 있습니다. 웹 서버는 .Net 3.5입니다. SQLServer 또는 Oracle 상자를 호스팅하는 서버에 액세스 할 수 없습니다. –

+0

데이터를 가져올 수 있기 때문에 DB 서버에 * 액세스 할 수 있습니다. :) 그러나 SSIS 패키지 나 SP를 만들 수 없기 때문에 가장 좋은 방법은 클릭 연결을 해제하는 것입니다 귀하의 명령 줄 응용 프로그램. 또는 명령을 받아들이는 서비스로 변환하십시오 (권장하지는 않지만 WCF 서비스 일 수도 있음). – jbehren

관련 문제