2009-08-22 5 views
1

ASP.NET 페이지에 동적으로 포함시키려는 HTML 텍스트 파일이 있습니다.ASP.NET 페이지에서 텍스트 파일 내용을 인라인으로 출력합니다.

가장 좋은 방법은 무엇입니까?

내 첫번째 추측은 페이지에 Literal 컨트롤을 만드는 것이었다 출력은 다음과 같습니다 :

litMyLiteral.Text = System.IO.File.ReadAllText("c:\path\to\file.htm"); 

이 좋은 해결책인가, 또는 더 나은 일이? 나에게 실적은 주요한 목표입니다. 이러한 스 니펫 파일은 내 사이트의 모든 페이지에 출력되기 때문에 많은 트래픽이 발생합니다.

감사합니다.

답변

2

얼마나 많은 파일이 있고 얼마나 자주 읽어야하는지에 따라 asp.net 캐시 에 동적으로로드하는 것이 좋으며 일부 유형의 만료 또는 캐시가 있어야합니다.

파일 액세스 및 캐싱 구현을 마무리하기위한 몇 가지 유형의 클래스를 작성하십시오. 이 코드는 작동하지만 그대로 사용하지 마십시오. 내가 말하는 것에 대한 아이디어를 제공하는 것입니다. 개선을 위해 모든 의견을 남기지 마십시오.

public static class StaticFiles 
{ 
    public static string GetFile(string file) 
    { 
     // Note filename is the key 
     if (Cache[file] != null) 
     { 
      // Return the cached data, this will be fast. 
      return Cache[file].ToString(); 
     } 
     else 
     { 
      // Make sure you do some exception checking/validation here for the 
      // file data and don't hard code the path and make it relative assuming 
      // it is in your application directory 

      // Do you file access and store it with some type of expiry 
      string output = System.IO.File.ReadAllText(string.Format("c:\path\to\{0}", file)); 
      Cache[file] = output; 
      return output; 
     } 
    } 
} 

캐시 만료 기간을 고려하여 데이터에 가장 적합한 것이 무엇인지 확인하십시오. 당신은 또한 당신이 만료되면 메모리 풋 프린트가 커지지 않도록 캐시 된 파일의 최대 개수를 허용하는 몇 가지 유형의 최대 검사를 구현할 수 있습니다. 총 파일 수와 파일 크기를보고 필요에 가장 적합한 파일을 찾아야합니다.

1

이것은 성능면에서 매우 나쁜 해결책입니다. 모든 단일 요청에서 파일 IO를 시작하는 항목은 성능이 문제가되는 경우 나중에 다시 돌아올 예정입니다. 훨씬 더 나은 방법은 포함시키고 자하는 모든 텍스트 파일의 내용을 모두 포함하는 캐시 된 사전을 만드는 것입니다 (지나치게 많은 내용이없고 지나치게 거대하지 않은 것으로 가정하고) 메모리에있는 내용이므로 모든 요청시 파일을 열 필요가 없습니다. 그 외 문자 그대로의 제어 방식은 나쁜 생각이 아니며 아마도 가장 간단한 접근 방식 일 것입니다.

관련 문제