2011-11-10 2 views
0

나는 사람들이 물건을 판매 할 장소가 있습니다. 매월 무언가를 판매하는 모든 사용자는 Windows 서비스에서 전자 메일을 보내 사용자에게 해당 항목이 판매되었는지 여부를 묻고 해당 내용을 확인하기 위해 클릭하라는 맞춤 링크를 제공합니다 (사용자 동의가 판매되는 사이트에 남아있는 항목).반복하지 않고 수천 개의 개별 이메일을 보냅니다.

먼저 모든 미 판매 품목 및 관련 사용자 이메일을 가져 오기 위해 검색어를 실행해야합니다. 현재이 모든 작업을 반복하고 있으며 각 사용자마다 맞춤 이메일을 생성하여 개별 이메일로 발송합니다.

foreach (Item unsoldItem in unsoldItemsCollection) 
     { 
      //generate email 

      string email = GenerateUnsoldEmail(itemName, itemPrice); 
      Utils.Sendemail(unsoldItem .UserEmail, "[email protected]", "Unsold Item", email); 

     } 

(이것은 의사 코드의 종류는, 그러나 이것은 거의 내가 뭘하는지입니다)

내 문제는의 (이 : 아마 수백만 벗고 경우) 가능성이 수천이있을 수있다 루프에있는 모든 항목에 전자 메일이 필요합니다. 문제가 발생할 것이라고 생각합니다.

다른 방법으로이 작업을 수행 할 수 있습니까?

벡스

+1

어떤 종류의 문제가 있습니까? 그것은 일종의 서비스로 실행되어 많은 시간이 걸릴 경우 주 사이트 실행에 해를 끼치 지 않도록해야합니다. – ElDog

+0

어쩌면 내가 잘못 생각한 것 같습니다. 그러나 계속해서 수백만 개의 항목을 반복하고 각 전자 메일을 보내면 몇 시간이 걸리지 않고 서버 메모리를 사용할 수 있습니까? 나는 편지 병합을 생각하고 있을지 모르겠다. 잘 모르겠다. – Bex

+1

루프가 정상입니다. 일반적으로 *** 지금 일하는 간단한 무언가를 얻는 것이 좋다 ***.'일어날 수있는 일'에 대해 걱정할 필요가 있습니다. 수백만 명의 사용자가있는 경우 문제를 해결할 수있는 좋은 팀을 확보 할 수 있습니다. –

답변

0

당신이 컬렉션의 모든 항목에 대한 뭔가를하려는 경우 (재귀처럼, 또는 이에 상응하는 무엇인가) 루프의 어떤 종류를 사용해야합니다. 그 주위에 방법이 없습니다.

잠재적 인 문제에 대해 걱정하지 말아야합니다. 이 코드가 성능상의 문제라고 생각한다면 실제로 측정 한 속도와 처리 할 이메일 수를 알아보십시오.

모든 이메일을 보내는 데 몇 시간이 걸릴 까봐 걱정됩니다. 그게 실제로 문제가되는거야? 왜?

너무 많은 메모리가 필요할 수도 있습니다. 한 번에 모든 항목을 메모리에 저장할 수 없다면 한번에 1000 개씩 처리하고 처리 한 다음 다른 1000 개를 가져와야합니다.

+0

난 항상 stackoverflow에 내 문제를 관점에 넣어 누군가에 의존 할 수 있습니다. 이것은 좋은 조언과 최고의 계획처럼 들리 네요! 감사합니다. – Bex

2

현재 이메일이 전송 될 때까지 프로그램이 중단되지 않도록 내가 비동기 적으로이 작업을 수행 할 것입니다.

모든 이메일이 다르기 때문에 편지를 병합 할 수 없습니다. 전자 메일 본문에 사용자가 로그인해야하는 일종의 방문 페이지가 있고 사용자의 모든 항목이 나열되고 사용자에게 요청되는 특정 페이지로 사용자를 리디렉션하지 않으면 이미 팔린 것들을 제거하십시오. 이 경우 수천 대신 전자 메일을 보낼 수 있습니다.

SmtpClient has an async version of the Send method

0

모든 이메일을 하루에 한 번.

또는 더 단순한 콘솔 유틸리티를 만들어 동일한 작업을 수행하고 예약 된 작업으로 실행할 수 있습니다.

관련 문제