Microsoft MVP성태의 닷넷 이야기
웹서비스에서 캐시를 사용하고 싶습니다. [링크 복사], [링크+제목 복사],
조회: 12800
글쓴 사람
김용환 (70003431 at dreamwiz.com)
홈페이지
첨부 파일
 

jquery 를 이용해서 html에서 웹서비스를 이용하는 프로젝트를 하고 있습니다.
로그인해서 캐시에 데이타를 집어넣고 로그아웃때 지우는걸 하고싶습니다.
로그인페이지에서 로그인버튼을 누르면 웹서비스에서 체크한다음 캐시에 값을 넣어두고
요청마다 그 캐시의 값을 읽는게 하고싶습니다.

트리데이타를 위해 쿼리를 날리고 그 데이타를 재귀함수를 통해 다시 데이타테이블을 만들어서
그 데이타테이블을 데이타셋에 담아서 아래의 함수를 호출합니다.

        private void SetTreeData(DataSet ds)
        {
            DataTable dtCache = (DataTable)HttpContext.Current.Cache["tree"];
            DataTable dtTreeData = ds.Tables[0];

            if (dtCache != null)
            {
                if (!dtCache.Equals(dtTreeData))
                {
                    SetCache(dtCache, dtTreeData);
                }
            }
            else
            {
                SetCache(dtCache, dtTreeData);
            }
        }

        private void SetCache(DataTable dtCache, DataTable dvTreeData)
        {
            CacheDependency dep = new CacheDependency(Server.MapPath(@"/TreeData.html"));

            string sPath = Server.MapPath(@"/TreeData.html");
            FileStream fs = new FileStream(sPath, FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);

            foreach (DataRow dr in dvTreeData.Rows)
            {
                sw.WriteLine(dr["li"].ToString());
            }
            sw.Flush();
            sw.Close();

            dtCache = dvTreeData;
            HttpContext.Current.Cache.Insert("tree", dtCache, dep, DateTime.Now.AddDays(1), TimeSpan.Zero);
        }

데이타를 읽어서 파일에 쓴다음 그걸 읽어서 트리에 뿌리고 있는데.
이걸 매번 수행해서 문제가 있습니다.
그래서 캐시에 넣어놓고 있다면 파일에 쓰는부분과 캐시에 넣는 부분을 하지 않고 싶은데...
잘 안되고 있습니다...

이게 완료되면 로그인후 캐시에 넣고 쓰는걸 해보려고 했는데...
현 상황으로 진행이 안될거 같습니다...
도움이 절실합니다 ㅠㅠ








[최초 등록일: ]
[최종 수정일: 10/14/2008]


비밀번호

댓글 작성자
 



2008-10-14 09시52분
음... ^^; 즉, 위의 코드가 동작이 안 된다는 것인가요?

보면,,, 뭔가 좀 이상하긴 한데요. SetTreeData에서 dtCache가 null 나온 경우, 그걸 SetCache(dtCache, dtTreeData);에 넘겨주고 있는데요.

Call by Ref와 Call by Value에 대해서 헷갈리시는 것 같습니다. 비록 닷넷이 기본적으로 Call by Ref로 참조형에 대해서 처리해준다고 해도, 역시나 넘어가는 것은 참조값에 대한 복사값일 뿐입니다. 즉, null을 넘기는 경우 그 null에 대한 복사본이 스택에 전달된다는 것이지요.

그로 인해, SetCache 안에서 dtCache = dvTreeData로 값을 넣었다고 해서, SetCache 함수 밖에 있는 dtCache 인자가 할당되어져 있는 것은 아닙니다. 그런 경우, 굳이 해야한다면 SetCache(ref DataTable dtCache, ...);와 같은 식으로 정의하셔야 합니다.
kevin25
2008-10-15 09시25분
답변 주셔서 감사합니다 ㅠㅠ
null 이 나온경우 if (!dtCache.Equals(dtTreeData)) 캐시데이타랑 넘어온 트리데이타랑 다르면
함수를 호출하게 만들었습니다.
캐시에 데이타가 없거나 데이타가 변경되었으면 트리데이타로 캐시를 만들려고 한건데...
찬찬히 다시 살펴보겠습니다...
코드를 떠나 처음 함수가 호출되어서 캐시를 생성했을때 지우지 않는이상 살아있긴 한게 맞는지 궁금해집니다 ㅡㅜ
kimyh
2008-10-15 11시28분
뭘 잘못했는지 알았습니다...
CacheDependency dep = new CacheDependency(Server.MapPath(@"/TreeData.html"));
이넘이 파일이 변하면 캐시를 날리는데...로직은 파일을 계속 고쳐서 그랬네요 ㅡㅡ;;
그래서 dep 부분을 null로 캐시생성을 했더니 캐시는 존재하는군요 ㅠㅠ
대신 데이타테이블과 데이타테이블의 비교가 안되네요...
될까? 하긴 했었는데...
if (!dtCache.Equals(dtTreeData)) 이부분이 비교가 되질 않는거 같아서 어째야할지
고민이 바뀌었답니다 ㅡㅜ
kimyh

... 31  32  33  34  35  36  37  38  39  40  41  42  43  [44]  45  ...
NoWriterDateCnt.TitleFile(s)
4749강준8/11/201612464ElementHost Memory Leak 현상 [6]
4748Bere...8/3/201611337그냥 생각이 들어서 여기 글 써봅니다. [1]
4746힘찬도약8/2/201611617[asp.net] local에서 cookies값이 읽혀지지 않는 경우 [1]
4747힘찬도약8/3/201612351    답변글 [예제 첨부]: [asp.net] local에서 cookies값이 읽혀지지 않는 경우 [3]파일 다운로드1
4745힘찬도약7/27/201612452.NET 자식창 데이터를 부모창에 전달시 오류 질문드립니다. [4]파일 다운로드1
4744변찬연7/27/201612148안녕하세요 그 edge를 이용하는 데 조금 불편함이 있어서 문의드립니다 [1]
4743딸랑구아빠7/26/201611180IE 사용 시 인증 정보 계속 보내기? [1]
4741차가워7/20/201612871UWP 에서 COM 참조 불가능한가요? [6]
4740luna...7/19/201613279clickonce manifest 파일 질문 [1]
4739윤똘씨7/19/201612723정말 감동적입니다... [7]
4738닷넷초보7/7/201611601안녕하세요. C#의 개체 전달방식(참조)에 관련해서 질문 있습니다. [3]파일 다운로드1
4737beau...7/6/201613919python embedding 한 c++ 프로그램의 배포에 관해서 질문드리고 싶습니다. [1]
4736spow...7/6/201610780Property Lambda에 대한 심층 분석을 의뢰합니다 [7]
4735힘찬도약7/5/201611931.Net/Web.config에서 MSSQL을 쓰는데, MysqlSiteMap 참조오류 [3]파일 다운로드1
4734spow...6/28/201611530Visual Studio 2015 + Windows Forms 환경에서 컴파일 할 때 드물게 개발환경이 Crash 됩니다 [1]
4733feel...6/15/201611977타 서버로 소스 이전 중 [3]파일 다운로드1
4732구봉근6/14/201610713안녕하세요 [1]파일 다운로드1
4731초급개발자6/7/201613216Windows Form Application는 사라질까요? [2]
4730김시현6/4/201611266책으로 공부하던 도중 생성자에 대해서 궁금한게 생겼는데 혹시 답변좀 해주실수 있나요? [1]
4729Jeah...6/3/201612732C#.Net 프로그램에서 C++로 만들어진 dll 파일 이용관련 문의 하나 드립니다. [3]
4727링거5/30/201611399WPF MediaElement 파일 실행 후 삭제시 오류 문의 [1]파일 다운로드1
4728링거5/30/201611766    답변글 [답변]: WPF MediaElement 파일 실행 후 삭제시 오류 문의 [2]파일 다운로드1
4726spow...5/25/201611201덧글을 달고 나서 F5를 눌렀을 때 똑같은 덧글이 달리는 현상 고쳐주세요 [4]
4725Futu...5/23/201611647책 잘보고 있습니다. Task관련 질문을!!! [1]
4724학생15/23/201612973웹소켓과 소켓 관련해서 질문 드립니다. [2]
4722지나가던...5/15/201614785Part 3 pdf파일 그림 재수정 문의 [1]
... 31  32  33  34  35  36  37  38  39  40  41  42  43  [44]  45  ...