Microsoft MVP성태의 닷넷 이야기
웹서비스에서 캐시를 사용하고 싶습니다. [링크 복사], [링크+제목 복사],
조회: 16830
글쓴 사람
김용환 (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

1  2  3  4  5  6  [7]  8  9  10  11  12  13  14  15  ...
NoWriterDateCnt.TitleFile(s)
5808근우1/30/202310799WPF 에서 UserControl 과 ControlTemplate 의 차이점은 무엇인가요? [6]
5807궁금맨1/28/202313155C# 10 책에 나온 예제의 결과가 제 컴에서는 좀 달라서요. 이유가 궁금합니다. [1]
5806스레드1/25/202310350총정리 - 다양한 스레드들 [초안] [1]파일 다운로드1
5805어웨이트1/25/202310135Taskcontinuewith vs Async/Await [2]파일 다운로드1
5804나이많은...1/25/20239927MS의 Dependency Injection(DI)에 AddSingleton으로 등록된 객체의 Event 등록후 사용시 앱 종료시 별도로 Event를 해지해야 하나요? [2]
5803dssc...1/24/202310336드라이브 문자를 통해서 물리 디스크 명칭을 알아내고 싶습니다. [1]
5802모바일앱1/22/202310806XAMARINE vs Android Studio [7]
5801블루투스1/19/202311480WPF 은행지폐계수기 개조 후 결과값 서버 전송 [2]파일 다운로드1
5800김민아1/19/202311659안녕하세요 가비지 컬렉터 동작 원리 중 궁금한점이 있습니다 [5]
5799guest1/19/202310955C# 공유폴더 내 Acess 디비 공유 [2]
5798kss1/19/202310115책 오탈인가요? [1]
5797이거비버1/19/20239895C# 공부 이후 MS 프레임워크.. 어느것을 공부해야할까요? 너무 많아서 정신이 없네요 [5]
5796guest1/19/20239683해킹 test [3]
5795동기1/18/20239009동기 스레드와 메서드와 While [2]
5794박규동1/18/20239197.net publish 할때마다 runtimeconfig 값이 바뀌는 현상 [1]
5793후후훗1/18/20239685.NET Core 에서 사용중인 함수 후킹 방법 [2]
5792Will...1/18/20239573소스코드 Log Write 기능을 리스트업 질문 [9]
5791PLC1/16/202310223C# - 실시간 5개 룸 모니터링 [15]
5790집으로 ...1/13/20239846[UI 멈춤 현상]deadlock 관련 글을 보고 혹시나 하고 문의 드립니다. [4]
5789guest1/10/20239735스레드와 Async Task [2]파일 다운로드1
5788kr11/10/202310184C# 에서 제공하는 컬렉션들의 차이점이 궁금합니다. [3]
5787stack1/10/202310089STACKOVERFLOW [1]
5786Dev ...1/9/202311933익명 클래스 말고 익명 구조체는 불가능한걸까요? [4]
5785음성인식1/8/202311645음성인식 System.Speech - 문법에 사용된 언어가 음성 인식기의 언어와 일치하지 않습니다. [2]
5784MS워드1/8/202310879MS워드에서 ctrl Z는 클립보드를 이용하나요? 아니면 참조자 이용하나요? [7]
5783구직자1/7/202310140C#개발자 구인광고와 초급개발자 [3]파일 다운로드1
1  2  3  4  5  6  [7]  8  9  10  11  12  13  14  15  ...