엔터프라이즈 라이브러리(EL)2.0 기반 프레임웍을 손보고있다.

몇가지 이상하게 만들어진 부분과, 내 라이브러리를 추가해서 개발 패턴을 수립해 주는 것이 목적이다.

빌딩블로 dll  각 하나씩을 참조해서 새로운 프레임웍을 만든것 같은데...이렇게하면 각 빌딩블록이 수정된 경우  수정된 dll 만 배포하면 되지만...빌딩블록자체를 수정해서 쓸일이 있을까...하나로 합치기로 했다.

근데 문제가 발생했다.

EL 소스코드를 한군대로 옮기고 컴파일을 시도했더니
Properties.Resourcies 를 찾을 수 없다고 나온다.

평소 리소스를 안쓰기에...이게 뭔소린가 했다.

삽질이 시작된다.

빌딩블록은 각자 Resources.resx 를 갖고있었다. 그곳에 static 값들(에러 메세지나 스트링포맷같은..)을 넣고 쓰고 있었다.

그리고 코드에서

using 프로젝트명.Properties; 를 추가하고

Resources.리소스이름 ;

이렇게 사용하고 있었다.
자료를 찾아보니 리소스를 생성한경우 Properties.Resources 라는 static 프로퍼티로 쉽게 리소스에 접근하는 방법을 제공하고있었다.

Replace 를 해서 using 프로젝트명.Properties; 이 부분을 모두 바꾸었다.

오 그러나 엄청난 컴파일 오류들...ㅜㅜ

한참만에.....원인을 찾았다
프로젝트명중에 대문자 W 를 소문자 w 로 수정한 일이 있엇다.
vs2005 에서 dll  명과 Resources.Designer.cs 에서 스트링으로 접근하는 dll  명은 대문자 W  인 상태에서 바뀌지 않았다.
게다가 using 프로젝트명.Properties; 이 부분에 나오는 프로젝트명은 dll 이름이였다. 다른 프로젝트를 참조해서 리소스레 접근하는 경우 빌드할때 설정한 dll 명을  사용하면 된다.

이런일이 발생하는 경우 프로젝트 속성정보와 Resources.Designer.cs 파일을 살펴봐야 한다.

덕분에 하루가 금방 가버렸다.

신고

'DotNet' 카테고리의 다른 글

PostSharp 을 이용한 PropertyChanged 이벤트 주입하기  (3) 2011.03.18
Cache(캐시) 관련  (0) 2010.12.23
리소스 사용하기(삽질기)  (1) 2010.05.24
[링크]AOP  (2) 2010.05.17
C# 4.0 에 추가된 기능들  (0) 2010.04.30
VS2010 beta2 동영상  (0) 2010.01.28

댓글을 달아 주세요

  1. Favicon of http://www.topluxwatch.com BlogIcon Tag Heuer Carrera 2011.07.18 11:36 신고 Address Modify/Delete Reply

    This article is really great, strong support

사이트 튜닝과 개발자들의 개발 편의성을 위해  새로운 script  태그(사용자 지정 컨트롤)을 하나 만들었다.

시나리오대로 라면 expires 해더를 통해 스크립트가 브라우저 캐시가 되어야 하고 만료일 전까지는 Request를 보내지 않아야 한다.

fiddler 로 조사해 보니 해더에 분명히 expires 해더가 붙었는데도...이 놈이 요청을 보낸다.
브라우저의 캐시 폴더에 캐시가 저장되어있는데도 말이다....오 이런일이..왜 그런 것일까.

혹시 몰라 우선 304 리턴 부분을 만들어 두었다. 브라우저 캐시가 안된다면 304 라도 처리해야 체면이 선다.

Last-modified 해더와  Etag 도 설정해 봤는데 모두 같은 현상이다.
304 처리는 잘 되지만 만료일일 지정된 놈이 계속 요청을 보낸다. 미치겠다.

한가지 자료를 찾았다.
http://weblogs.asp.net/scottgu/archive/2006/04/11/Don_1920_t-run-production-ASP.NET-Applications-with-debug_3D001D20_true_1D20_-enabled.aspx

디버그 모드로 컴파일한 경우 axd  핸들러 내용이 캐시되지 않는다는 내용이 있다.
클라이언트의 웹사이트는 왠지 모르지만 디버그 모드로 운영중이라고 한다.(ㅡㅡ;)
나도 디버깅을 위해 디버깅상태로 테스트 햇으니 이게 유력한 용의자일까?
닷넷 개발자들의 편의를 위해 디버그 모드인 경우 수정된 내용이 바로 적용되도록 캐시를 무시하도록 처리되었다고 한다.
이제 debug=false 로 놓고 다시 테스트를 해본다.


삽질이였다.

테스트를 한다고 F5 키를 누르면서 한 것이 원인인듯 하다.
http://www.ibm.com/developerworks/kr/library/wa-aj-cache/index.html
이 자료를 보면 expires 가 설정된 경우라도 F5 를 누르면 IE는 요청을 보낸다.
그렇기 때문에 304가 계속 나온것이다.

F5 가 아닌 링크를 통해 페이지를 이동하는 경우 예상대로 요청을 보내지 않았다.
긴 삽질이였다.



신고

댓글을 달아 주세요

1. Server.MapPath

  • Server.MapPath(".") returns the current physical directory of the file (e.g. aspx) being executed
  • Server.MapPath("..") returns the parent directory
  • Server.MapPath("~") returns the physical path to the root of the application
  • Server.MapPath("/") returns the physical path to the root of the domain name (is not necessarily the same as the root of the application)

  • 2. Request 에서 경로 : http://www.west-wind.com/weblog/posts/132081.aspx

    Request Property Description and Value
    ApplicationPath Returns the web root-relative logical path to the virtual root of this app.
    /webstore/
    PhysicalApplicationPath Returns local file system path of the virtual root for this app.
    c:\inetpub\wwwroot\webstore
    PhysicalPath Returns the local file system path to the current script or path.
    c:\inetpub\wwwroot\webstore\admin\paths.aspx
    Path
    FilePath
    CurrentExecutionFilePath
    All of these return the full root relative logical path to the script page including path and scriptname. CurrentExcecutionFilePath will return the ‘current’ request path after a Transfer/Execute call while FilePath will always return the original request’s path.
    /webstore/admin/paths.aspx
    AppRelativeCurrentExecutionFilePath Returns an ASP.NET root relative virtual path to the script or path for the current request. If in  a Transfer/Execute call the transferred Path is returned.
    ~/admin/paths.aspx
    PathInfo Returns any extra path following the script name. If no extra path is provided returns the root-relative path (returns text in red below). string.Empty if no PathInfo is available.
    /webstore/admin/paths.aspx/ExtraPathInfo
    RawUrl Returns the full root relative URL including querystring and extra path as a string.
    /webstore/admin/paths.aspx?sku=wwhelp40
    Url Returns a fully qualified URL including querystring and extra path. Note this is a Uri instance rather than string.
    http://www.west-wind.com/webstore/admin/paths.aspx?sku=wwhelp40
    UrlReferrer The fully qualified URL of the page that sent the request. This is also a Uri instance and this value is null if the page was directly accessed by typing into the address bar or using an HttpClient based Referrer client Http header.
    http://www.west-wind.com/webstore/default.aspx?Info
    Control.TemplateSourceDirectory Returns the logical path to the folder of the page, master or user control on which it is called. This is useful if you need to know the path only to a Page or control from within the control. For non-file controls this returns the Page path.
    /webstore/admin/


    ResolveUrl 은 Page 에서만 사용가능하고 핸들러에서는 지원 안한다고 한다.
    즉 핸들러에서 처리할  url에 "~" 못 쓴다는 것인가..

    위의 내용외에 보다 많은 내용이 http://www.west-wind.com/weblog/posts/132081.aspx 에 언급되고 있다.

    신고

    댓글을 달아 주세요

    사용자 지정 컨트롤...말이 어렵다.

    사용자 정의 컨트롤은 흔히 유저컨트롤이라고 하는 것이고, 사용자 지정 컨트롤은 컨트롤을 하나 만드는 것이다.

    암튼...

    현재 튜닝 중이 사이트는 독립적으로 돌아가기도 하지만 다른 웹사이트의 한 카테고리로 동작되기도 한단다.
    그래서 이 사이트의 루트 경로가 가변적이다. 즉 ApplicationPath 가 어디서 사용되는지에 따라 틀리다는 것이다.

    그러다 보니 스크립트나 css 링크를 모두 스트링 조합으로 만들어내고 있었다.

    <%= "<script src=\"" + Request.ApplicationPath + "/image/common/js/link.js\" type=\"text/javascript\"></script>" %>

    이런 식으로...

    그러다 보니 가독성도 떨어지고, 페이지 코드가 엄청 지저분해보인다.
    aspx 파일은 태그로 모든게 정리되는 것이 좋을 것 같고, 로컬에서 개발시 어디서 이 사이트가 쓰이던지 개발자 고려하지 않아도 문제가 되지 않는 코딩을 찾아보기 시작했다.

    서버 사이드 컨트롤들은 기본적으로 "~" 심볼을 사용할 수 있다. ~ 로 현재 어플리케이션 패스를 자동으로 찾아준다.

    그렇다면 Link 태그나 Script 태그를 runat=server 로 지정하고 ~  로 쓰면 문제가 해결되지 않을까?

    Link 태그는 잘 동작한다.
    Script 태그는 안된다.

    아마도 script 에 runat=server 를 지정하면 그건 서버사이드 코드로 인식하기 때문일 것이다.

    그럼 새로운 script 태그를 하나 만들어 사용하면 해결될것이 아닌가?

    그래서 아래와 같은 사용자 지정 웹 컨트롤을 하나 만들었다.


    [DefaultProperty("Scr")]
        [ToolboxData("<{0}:Script runat=server></{0}:Script>")]
        public class Script : WebControl
        {

            private string src;

            private static string beginTag ="\n<script type='text/javascript' src='{0}'>";

            //[Bindable(true)] // vs 에서 데이터 바인딩 대화창을 표시할 것인지 여부
            [Category("Appearance")] //속성창에서 어떤 카테고리에 표시할 것인지
            [DefaultValue("")]
            [Localizable(true)] //속성을 지역화 할것인지
            public string Src
            {
                get
                {
                    return src;
                }

                set
                {
                    //if (value.StartsWith("~"))
                    //{
                    //    src = ResolveClientUrl(value);
                    //}
                    src = ResolveClientUrl(value);
                }
            }

            public override void RenderBeginTag(HtmlTextWriter writer)
            {
                writer.Write(string.Format(beginTag, src));
            }

            public override void RenderEndTag(HtmlTextWriter writer)
            {
                writer.Write("</script>\n");
            }
            //protected override void RenderContents(HtmlTextWriter output) //이거로 하면 앞뒤 span 태그가 붙는다.
            //{
            //    output.Write(string.Format(baseCode,src));
            //}
        }


    페이지 상단에
    <%@ Register TagPrefix="DL" Namespace="DINS.DDRD.Web.UI.Core.Page" Assembly="DINS.DDRD.Web.UI.Core" %>

    위 처럼 등록하고
    <DL:Script  runat="server" Src="~/image/common/js/link.js" />

    이렇게 사용한다.

    이렇게 해서 지저분한 코드를 좀 더 보기 좋게 개선했고, 개발자는 웹사이트가 어디에서 동작할 것인지 고민하지 않고 개발할 수 있게 해주었다.


    참고 : http://ondotnet.com/pub/a/dotnet/excerpt/progaspdotnet_14/index2.html?page=1

     

    신고

    댓글을 달아 주세요

    1. qq123456 2011.09.20 14:40 신고 Address Modify/Delete Reply

      The recession has affected the apparel market too http://www.montblancvendita.com/ vogue for the girl with lots of attitude. And so are the pops of neon. If
      with most of the women clothing within affordable http://www.comprarmontblanc.com/ you don't want to stand out but insist on a comfy look, then you can
      range. Dressing up for the party is possible with very http://www.montblancloja.com/ still wear the evergreen jeans with a jacket or a pullover to go with it.

    2. Favicon of http://louisvuittononline.judisells.com BlogIcon Vuittonurzq 2013.05.07 11:12 신고 Address Modify/Delete Reply

      http://louisvuittonshoes.judisells.com electrical power products which aren't suitable for both males and females. Propecia is one particualr treatment which may be safe for guys however,though shouldn't be used by the women. Minoxidil can be by both ladies and men. louis vuitton locations uk http://louisvuittonstore.judisells.com

    http://www.hanselman.com/blog/GettingSessionStateInHttpHandlersASHXFiles.aspx

    핸들러에서 세션값이 널로 나와서..왜 그런지 찾아봤다.
    이렇게 하면 된다고 한다.

    이유는 모른다..ㅎㅎ

    IReadOnlySessionState
    추가로 구현하뎐되다.

    http://weblogs.asp.net/ashicmahtab/archive/2008/09/18/how-to-use-session-values-in-an-httphandler.aspx

    여기에서 처럼  IRequiresSessionState fmf rngusgoeh 를 구현해도 된다.
    차이는 읽기만 할거냐 아니냐..
    dlrjf
    신고

    댓글을 달아 주세요

    1. Favicon of http://www.usbcustomer.com BlogIcon ousb 2011.01.20 16:45 신고 Address Modify/Delete Reply

      TheNvidai <a href="http://www.elec-products.com ">promotional usb flash drives</a> had answer the<a href="http://www.usbcustomer.com">custom usb flash drives</a>
      bound copy<a href="http://www.topusbdrive.com">branded usb flash drives</a>Polarized<a href="http://www.bestusbmemory.com">best usb flash drives</a>href="http://www.usb-disk.com">wholesale usb flash drives</a>matches <a href="<a href="http://www.topusbdrive.com/oem-usb-card-usb-drives-c-4_32.html">Card USB Drives </a>="http://www.cheapusbdisk.com">cheap usb flash drives</ahigh-end cartoon<a href="http://www.onlineusb.net">oem usb flash drives</a>href="http://www.onlineusb.net">oem usb</a>copy costs about <a href="http://www.onlineusb.net/plastic-usb-flash-drives-c-4.html">Plastic USB Flash Drives</a>Some <a href="http://www.onlineusb.net/metal-usb-flash-drives-c-7.html">Metal Usb Flash Drives</a>bad aftereffect <a href="http://www.onlineusb.net/swivel-usb-flash-drives-c-5.html">Swivel Usb Flash Drives</a><a href="http://www.onlineusb.net/pen-usb-flash-drives-c-12.htmlt">Pen Usb Flash Drives</a>no acclimation href="http://www.onlineusb.net/wooden-usb-flash-drives-c-6.html">Wooden Usb Flash Drives</a> system. So <a href="http://www.onlineusb.net/mini-thin-usb-flash-drives-c-11.html">Mini / Thin Usb Flash Drives</a> we shall not<a href="http://www.onlineusb.net/leather-usb-flash-drives-c-8.html">Leather Usb Flash Drives</a>abrasion the 3d<a href="http://www.onlineusb.net/credit-card-usb-flash-drives-c-9.html">Credit Card Usb Flash Drives</a><a href="http://www.onlineusb.net/cartoon-usb-flash-drives-c-13.html">Cartoon Usb Flash Drives</a> long, or we <a href="http://www.onlineusb.net/custom-shapes-usb-flash-drives-c-10.html">Custom Shaped Usb Flash Drives</a> may feel<a href="http://www.china-3dglasses.com">3d glasses</a> aching in our head.<a href="http://www.onlineusb.net/cartoon-usb-flash-drives-c-13.html">Cartoon Usb Flash Drives</a>We can seek <a href="http://www.onlineusb.net/custom-shapes-usb-flash-drives-c-10.html">Custom Shaped Usb Flash Drives</a> something about <a href="<a href="http://www.topusbdrive.com/oem-usb-leather-usb-drives-c-4_23.html">Leather USB Drives ="<a href="http://www.topusbdrive.com/oem-usb-pen-usb-drives-c-4_31.html">Pen USB Drives </a>="<a href="http://www.topusbdrive.com/brand-usb-sandisk-c-3_13.html>sandiskusb</a> ="<a href="http://www.topusbdrive.com/brand-usb-transcend-c-3_15.html>transcend usb</a>=index&cPath< href="<a href="http://www.topusbdrive.com/brand-usb-adata-c-3_7.html>adata usb</a> The cast <a href="<a href="http://www.topusbdrive.com/brand-usb-adata-c-3_7.html>adata usb</a>href="http://www.oemusb.org">oem usb</a>Glasses is actual nice. And we see abounding cinemas accept this brand, but it is too expensive. We can go to see Nvidai controlling shop, there are abounding bargain Abounding of them fit the amateur player. announcement approach of Nvidai is actual generally in PC and has absolutely acceptable effect. There is something appropriate in authoritative the Bracelet USB Drivess, such as the abnormality of colors. It is a stereoscopic imaging technology. Now we charge to mix some assorted colors together.

    2. qq123456 2011.09.20 14:35 신고 Address Modify/Delete Reply

      One of the best things that the Bratz http://www.solbrillerbillige.com/ Function. As we have said earlier, fashionable clothing
      apply when it comes to fashion is that they http://www.okularyprzeciwslonecznesklep.com/ should not only be stylish but also should serve its purpose. A
      do not just wear anything, even the latest fashion http://www.zonnebrilopteslaan.com/ good example would be why wearing faux fur on .

    Open Flash Chart

    javascript 2009.12.08 09:09 |
    http://teethgrinder.co.uk/open-flash-chart-2/

    간만에 방문한 십년차초보개발자 님 블로그에서 발견한 플래시 차트...
    전에는 주로 YUI chart 를 사용했는데..이게 더 좋아 보인다.
     YUI 차트는 YUI 라이브러리를 모두 로드해야하고 아직 베타다..
    YUI3  버젼에서는 아직 차트가 추가되지 않은 듯 하다.

    게다가..

    Server Side Helper Libraries

    PHP, Perl, Python, Ruby, .NET, Google Web Toolkit and JAVA. Libraries.

    위에서 처럼 닷넷용 헬퍼 라이브러리도 제공한다..오!!!


    신고

    댓글을 달아 주세요

    네이버 맵을 이용한 화면을 만들어야 하는 일을 하던 중 몇가지 이슈가 생겼다.

    맵에 표시할 마커(맵에 올라간 아이콘 같은 표시.)들의 좌표를 매번 네이버에 물어봐야 한다는 것이다.
    맵에 올릴 마커의 갯수가 100개라면 페이지 로딩시 100번의 위치를 조회해야한다.
    속도도 속도지만, 매번 같은 데이터를 질의 하는 것은 낭비다.
    또한 네이버 api   의 일일 쿼리 제한이 걸려있다.

    맵에 올릴 마커의 갱신주기는 몇주 이상이다.(잘 바뀌는 데이터가 아니다.)
    그렇다면 네이에 질의한 좌표를 디비에 저장하면 한번 물어본 위치는 다시 물어볼 필요가 없을 것이다.

    하지만 역시 매번 페이지를 표시할 때 마다 디비를 조회해야 한다.
    거의 변하지 않는 데이터를 매번 디비에 질의하는 것은  문제가 있어보인다.

    그래서 서버메모리에 한번 질의된 내용을 캐시하고 캐시는 1일 주기로 갱신하게 처리했다.
    닷넷 HttpContext 에 Cache 클래스가 만들어져 있다.
    이것을 이용해 질의 된 내용을 저장하고 하루 동안은 디비에서 값을 읽지 않고 메모리 내용을 그대로 보여주게 하였다.

        /// <summary>
        ///  캐시에 넣을 객체
        /// </summary>
        public class CachedMarkers
        {
            public DateTime UpdateDate; //캐시 날자기록
            public string JsonString; //캐시된 내용
        }
    .....  이처럼 캐시에 저장할 객체를 하나 만들고..

        if (context.Cache["Markers"] != null)
        {
               CachedMarkers Markers = (CachedMarkers)context.Cache["Markers"];

               if (Markers.UpdateDate.Day == DateTime.Now.Day) // 캐시가 유효한가?


    ..... 캐시된 내용이 있고 캐시날자가 유효하면 캐시에 내용을 바로 쓰자

                   // 캐시가 없거나 유효하지 않을 때 캐시 다시 만들기
                   CachedMarkers NewMarkers = new CachedMarkers();

                    NewMarkers.JsonString = GetMarkersToJosn(GetInfo());
                    NewMarkers.UpdateDate = DateTime.Now;

                    context.Cache.Remove("Markers");
                    context.Cache.Add("Markers", NewMarkers, null, DateTime.Now.AddDays(1),
                        Cache.NoSlidingExpiration, CacheItemPriority.Normal, null);


    거의 정적인 데이터에 대해 이 방법을 사용하면 사람이 느낄정도의 속도 향상이 나타난다.

    신고

    댓글을 달아 주세요

    1. qq123456 2011.09.20 14:41 신고 Address Modify/Delete Reply

      Expensive looking clothing not making too much of a stress http://www.viviennewestwoodonsale.uk.com/ style will do wonders if worn with a little bit of plaid designs. It
      on your purse strings. The punk style patterns are still in http://www.westwoodjewellerystore.com/ calls for a day out with your friends at the trendiest parties.



    Examples of ASP.Net C# Srting.Format Function

    출처 :  http://programming.top54u.com/post/ASP-Net-C-sharp-String-Format-Function.aspx

    string arg0 = "arg0";


    string arg1 = "arg1";


    string arg2 = "arg2";


    Response.Write(
    string.Format("String Format Function Passed with 1 Arg: {0} <br />", arg0));


    Response.Write(
    string.Format("String Format Function Passed with 2 Args: {0} and {1} <br />", arg0, arg1));


    Response.Write(
    string.Format("String Format Function Passed with 3 Args: {0}, {1}, {2} <br />", arg0, arg1, arg2));




    string arg3 = "arg3";


    string[] args = new string[] { arg0, arg1, arg2, arg3 };


    Response.Write(
    string.Format("String Format Function Passed using Array of 4 Args: {0}, {1}, {2}, {3} <br />", args));



    Response.Write(
    string.Format(System.Globalization.CultureInfo.CurrentCulture,"String Format Function with CultureInfo IFormatProvider and Array of 4 Args: {0}, {1}, {2}, {3} <br />" , args));


    Response.Write(
    string.Format("String Format Function to Convert Decimal to Hexadecimal: {0:X} <br />", 255));


    Response.Write(
    string.Format("String Format Function to Convert Decimal to Scientific Number: {0:E} <br />", 255));


    Response.Write(
    string.Format("String Format Function to Convert Decimal to Number Format: {0:N} <br />", 255));


    Response.Write(
    string.Format("String Format Function to Convert Number to Currency: {0:C} <br />", 255));


    Response.Write(
    string.Format("String Format Function to Convert to Number Format: {0:000,000.00} <br />", 123456789));


    Output

    String Format Function Passed with 1 Arg: arg0


    String Format Function Passed with 2 Args: arg0 and arg1


    String Format Function Passed with 3 Args: arg0, arg1, arg2


    String Format Function Passed using Array of 4 Args: arg0, arg1, arg2, arg3


    String Format Function with CultureInfo IFormatProvider and Array of 4 Args: arg0, arg1, arg2, arg3


    String Format Function to Convert Decimal to Hexadecimal: FF


    String Format Function to Convert Decimal to Scientific Number: 2.550000E+002


    String Format Function to Convert Decimal to Number Format: 255.00


    String Format Function to Convert Number to Currency: $255.00


    String Format Function to Convert to Number Format: 123,456,789.00

    In the examples you can see that we have used some format types such as {0:X}, {0:E}, {0:N}, {0:C}. These formats work as follows:

    {0:X} converts decimal number to hexadecimal.

    {0:E} converts decimal number to scientific exponential form.

    {0:N} converts decimal number to number format.

    {0:C} converts number to currency format.

    신고

    댓글을 달아 주세요

    1. Favicon of http:// http://www.monclersaleonline.uk.com/moncler-women-s-vests.html BlogIcon ling 2011.06.17 10:14 신고 Address Modify/Delete Reply

      In conclusion, while there is some http://www.watchingfreemovie.com/ hype linked with Axe whole body Spray, it could nevertheless provides benefits not readily available between http://www.pandorastekoop.com/pandora-14k-gold-charms.html other http://www.pandorastekoop.com/pandora-silver-gold-charms.html low cost http://www.pandorastekoop.com/pandora-flowers-beads.html fragrances. However, if you actually are searching for a a great offer more genuine cologne smell, as well as your spending budget is limited, consider http://www.pandorastekoop.com/pandora-spacers-beads.html getting cologne from perfume outlets supplying low cost fragrances.

    2. qq123456 2011.09.20 14:33 신고 Address Modify/Delete Reply

      Well you do not need to frustrate yourself with this; you http://www.kvindersmoncler.com/ Fashion has three elements. These have to
      only need to learn how to get the right fashion which you http://www.monclervanntett.com/ be satisfied before you can perfect the so-called
      can apply to yourself. One of the most glamorous celebrities http://www.monclervesten.com/ fashion. The three elements are personality function, and
      with stellar popularity when it comes to fashion is http://www.thetiffanyonline.com/ style. When you have these fitted. in one, you are in the

    3. Favicon of http://www.moncleroutletespain.com/ BlogIcon moncler chaquetas 2013.01.04 15:32 신고 Address Modify/Delete Reply

      Les Etats-Unis ont offert lundi leur aide à l'Australie, http://www.moncleroutletespain.com/ moncler chaquetas, touchée par des inondations sans précédent qui auraient affecté 200, http://www.moncleroutletespain.com/ http://www.moncleroutletespain.com/.000 personnes, http://www.moncleroutletespain.com/ moncler españa.Related articles:


      http://www.kkangtong.net/66 http://www.kkangtong.net/66

      http://lovelyherb.tistory.com/232 http://lovelyherb.tistory.com/232

    출처 : ASP.NET 2.0 - Web Site vs Web Application project

    asp.net 개발자들의 빈번한 질문 중 하나는 asp.net 프로젝트를 수행할 때 web site 모델을 택해야 하는지
    web application 모델을 선택해야 하는지에 대한 것이다.

    정답은 없다. 각자의 장단점이 존재하기 때문에 두 가지의 장단점을 비교해 선택을 하면 그뿐이다.

    Web Application project model

    • vs2003 부터 사용하던 모델 그대로이다.
    • 프로젝트 파일이 따로 존재한다.(이곳에 프로젝트의 구성이 저장된다.)
    • Build Model - 컴파일되어야 내용이 적용된다. 프로젝트가 하나의 어셈블리로 만들어진다.
    • IIS 와 내장된 개발 서버 , 두가지를 다 지원한다.(뭔소린지..)
    • vs2005 와 asp.net2.0 의 모든 기능들을 지원한다.(master pages, membership,login,site navigation,theme 등)
    • Frontpage Server Extention 을 반드시 필요로 하지 않는다.

    Web Site project model

    • 프로젝트 파일이 필요없다.(파일시스템을 기본 사용한다.)
    • 새로운 컴파일 모델이다.(여기여기를 참고할 것)
    • 페이지 마다 동적으로 컴파일 되어 실행된다.(최초 요청시 전체를 컴파일 하는 것이 아니다)
    • IIS 와 내장된 개발 서버 , 두가지를 다 지원한다.(역시 뭔소린지..)
    • 각 페이지는 각자의 어셈플리를 따로 갖는다.
    • 코드 모델이 기존방식과 다르다.(여기 참고)


    어떤 경우 어떤 모델을 선택해야 하나?

    • 대용량의 2003 프로젝트를 2005 프로젝트로 마이그레이션 해야한다면 Web-App 모델이 좋다.
    • 프로젝트 파일 변경없이 웹사이트 폴더나 파일을 바로 수정하고 싶다면 Web-Site 모델이 좋다.
    • 선행 빌드와 후 빌드 과정이 필요하면 web-app 를 선택해야 한다.
    • 각 페이지마다 별도의 어셈블리를 구성하려면 web-stie 프로젝트를 선택
    • 전체의 재컴파일 없이 페이지마다 따로 수정하는 것을 반영하려면 web-stie 모델이 좋다.
    • code-behind 모델 모다 single-page code 방식을 선호한다면 Web-site 모델이 좋다.
    신고

    댓글을 달아 주세요

    1. J 2009.01.23 17:50 신고 Address Modify/Delete Reply

      으흠~ 좋은 정보 감사합니다. 저 애독자예요~ ^^/
      즐거운 설날 되세요. 저도 잘 다녀 오겠습니다.

    2. Favicon of http://www.neostyx.net BlogIcon 엔틱스 2009.02.02 15:30 신고 Address Modify/Delete Reply

      좋은 글이 읽어보다가 글까지 쓰게 되었네요. ^^;;

      IIS 와 내장된 개발 서버, 두가지를 모두 지원한다는 얘기는

      IIS를 이용한 웹 프로젝트와 VS 2005부터 새롭게 내장된 ASP.NET Development Server 모두를 사용하여 개발할 수 있다는 가벼운 얘기이네요. ^^;;

      좋은 글 감사합니다. ^^;;

      • 무쇠다리 2009.02.03 13:38 신고 Address Modify/Delete

        설명 감사합니다.
        좋은 블로그를 운여하시네요
        자주 방문하겠습니다.

    3. Favicon of http://www.uggsalesboots.com/ BlogIcon ugg boots baby 2010.11.01 12:44 신고 Address Modify/Delete Reply

      수행, 작물 및 레이크가 수 수확 ". 그래서 올해의 수확, 그리고 몇 일 후 오페라 팀 수행, 랴오닝 오페라 극단 시작 되었습니다.

    4. Favicon of http://www.swissonlinewatches.com/ BlogIcon best replica watches 2010.12.20 12:37 신고 Address Modify/Delete Reply

      여보세요, 좋은, 오
      전시회하시기 바랍니다. . .
      쿨러 날씨 ~ 당신의 건강에 주목, 따뜻한 의류를 추가하시기 바랍니다

    5. Favicon of http://www.monclerspeichernjackets.com/ BlogIcon moncler weste 2011.01.19 17:51 신고 Address Modify/Delete Reply

      여보세요, 좋은, 오
      전시회하시기 바랍니다. . .
      쿨러 날씨 ~ 당신의 건강에 주목, 따뜻한 의류를 추가하시기 바랍니다

    6. Favicon of http://www.china3dglasses.com BlogIcon 3dglasse 2011.01.20 16:44 신고 Address Modify/Delete Reply

      The Polarized [url<a href="http://www.china-3dglasses.com/">wholesale 3d glasses</a>[url<a href="http://www.china-3dglasses.com/index.php?main_page=index&cPath=2">Eclipse Glasses</a> movies and <a href="http://www.china-3dglasses.com/index.php?main_page=index&cPath=3">Fireworks Glasses</a>other[url<a href="http://www.china-3dglasses.com/index.php?main_page=index&cPath=4">Plastic 3D Glasses</a> <a href="http://www.china-3dglasses.com/index.php?main_page=index&cPath=5">Polarized 3D Glasses</a>[url=http://www.china-3dglasses.com/index.php?main_page=index&cPath=5]Polarized 3D Glasses[/url]receipt is called 3D[url=http://www.china-3dglasses.com/index.php?main_page=index&cPath=6]cheap 3d glasses[/url]technology. Auxiliary equipment has <a href="http://www.china-3dglasses.com/index.php?main_page=index&cPath=6">3D Decoder Glasses</a>the equipment. So the Polarized 3D glasses suit the public place especially the cinema. The Plastic 3D glasses bring you different pictures between the left eye and the right eye. The left and right <a href="http://www.china-3dglasses.com/index.php?main_page=index&cPath=1">Red Cyan 3d Glasses</a>
      eye position is different, therefore the picture will have some differences. Photographs when the vectograph is with 2 lens one left one right. Then left side lens' phantom undergoes a horizontal polarizing disc filtration, obtains the horizontal polarized light, right side lens' phantom undergoes a vertical polarizing disc filtration, obtains the vertical polarized light.

    7. Favicon of http://www.usbcustomer.com BlogIcon ousb 2011.01.20 16:44 신고 Address Modify/Delete Reply

      TheNvidai <a href="http://www.elec-products.com ">promotional usb flash drives</a> had answer the<a href="http://www.usbcustomer.com">custom usb flash drives</a>
      bound copy<a href="http://www.topusbdrive.com">branded usb flash drives</a>Polarized<a href="http://www.bestusbmemory.com">best usb flash drives</a>href="http://www.usb-disk.com">wholesale usb flash drives</a>matches <a href="<a href="http://www.topusbdrive.com/oem-usb-card-usb-drives-c-4_32.html">Card USB Drives </a>="http://www.cheapusbdisk.com">cheap usb flash drives</ahigh-end cartoon<a href="http://www.onlineusb.net">oem usb flash drives</a>href="http://www.onlineusb.net">oem usb</a>copy costs about <a href="http://www.onlineusb.net/plastic-usb-flash-drives-c-4.html">Plastic USB Flash Drives</a>Some <a href="http://www.onlineusb.net/metal-usb-flash-drives-c-7.html">Metal Usb Flash Drives</a>bad aftereffect <a href="http://www.onlineusb.net/swivel-usb-flash-drives-c-5.html">Swivel Usb Flash Drives</a><a href="http://www.onlineusb.net/pen-usb-flash-drives-c-12.htmlt">Pen Usb Flash Drives</a>no acclimation href="http://www.onlineusb.net/wooden-usb-flash-drives-c-6.html">Wooden Usb Flash Drives</a> system. So <a href="http://www.onlineusb.net/mini-thin-usb-flash-drives-c-11.html">Mini / Thin Usb Flash Drives</a> we shall not<a href="http://www.onlineusb.net/leather-usb-flash-drives-c-8.html">Leather Usb Flash Drives</a>abrasion the 3d<a href="http://www.onlineusb.net/credit-card-usb-flash-drives-c-9.html">Credit Card Usb Flash Drives</a><a href="http://www.onlineusb.net/cartoon-usb-flash-drives-c-13.html">Cartoon Usb Flash Drives</a> long, or we <a href="http://www.onlineusb.net/custom-shapes-usb-flash-drives-c-10.html">Custom Shaped Usb Flash Drives</a> may feel<a href="http://www.china-3dglasses.com">3d glasses</a> aching in our head.<a href="http://www.onlineusb.net/cartoon-usb-flash-drives-c-13.html">Cartoon Usb Flash Drives</a>We can seek <a href="http://www.onlineusb.net/custom-shapes-usb-flash-drives-c-10.html">Custom Shaped Usb Flash Drives</a> something about <a href="<a href="http://www.topusbdrive.com/oem-usb-leather-usb-drives-c-4_23.html">Leather USB Drives ="<a href="http://www.topusbdrive.com/oem-usb-pen-usb-drives-c-4_31.html">Pen USB Drives </a>="<a href="http://www.topusbdrive.com/brand-usb-sandisk-c-3_13.html>sandiskusb</a> ="<a href="http://www.topusbdrive.com/brand-usb-transcend-c-3_15.html>transcend usb</a>=index&cPath< href="<a href="http://www.topusbdrive.com/brand-usb-adata-c-3_7.html>adata usb</a> The cast <a href="<a href="http://www.topusbdrive.com/brand-usb-adata-c-3_7.html>adata usb</a>href="http://www.oemusb.org">oem usb</a>Glasses is actual nice. And we see abounding cinemas accept this brand, but it is too expensive. We can go to see Nvidai controlling shop, there are abounding bargain Abounding of them fit the amateur player. announcement approach of Nvidai is actual generally in PC and has absolutely acceptable effect. There is something appropriate in authoritative the Bracelet USB Drivess, such as the abnormality of colors. It is a stereoscopic imaging technology. Now we charge to mix some assorted colors together.

    8. Favicon of http://www.usbcustomer.com BlogIcon ousb 2011.01.20 16:44 신고 Address Modify/Delete Reply

      TheNvidai <a href="http://www.elec-products.com ">promotional usb flash drives</a> had answer the<a href="http://www.usbcustomer.com">custom usb flash drives</a>
      bound copy<a href="http://www.topusbdrive.com">branded usb flash drives</a>Polarized<a href="http://www.bestusbmemory.com">best usb flash drives</a>href="http://www.usb-disk.com">wholesale usb flash drives</a>matches <a href="<a href="http://www.topusbdrive.com/oem-usb-card-usb-drives-c-4_32.html">Card USB Drives </a>="http://www.cheapusbdisk.com">cheap usb flash drives</ahigh-end cartoon<a href="http://www.onlineusb.net">oem usb flash drives</a>href="http://www.onlineusb.net">oem usb</a>copy costs about <a href="http://www.onlineusb.net/plastic-usb-flash-drives-c-4.html">Plastic USB Flash Drives</a>Some <a href="http://www.onlineusb.net/metal-usb-flash-drives-c-7.html">Metal Usb Flash Drives</a>bad aftereffect <a href="http://www.onlineusb.net/swivel-usb-flash-drives-c-5.html">Swivel Usb Flash Drives</a><a href="http://www.onlineusb.net/pen-usb-flash-drives-c-12.htmlt">Pen Usb Flash Drives</a>no acclimation href="http://www.onlineusb.net/wooden-usb-flash-drives-c-6.html">Wooden Usb Flash Drives</a> system. So <a href="http://www.onlineusb.net/mini-thin-usb-flash-drives-c-11.html">Mini / Thin Usb Flash Drives</a> we shall not<a href="http://www.onlineusb.net/leather-usb-flash-drives-c-8.html">Leather Usb Flash Drives</a>abrasion the 3d<a href="http://www.onlineusb.net/credit-card-usb-flash-drives-c-9.html">Credit Card Usb Flash Drives</a><a href="http://www.onlineusb.net/cartoon-usb-flash-drives-c-13.html">Cartoon Usb Flash Drives</a> long, or we <a href="http://www.onlineusb.net/custom-shapes-usb-flash-drives-c-10.html">Custom Shaped Usb Flash Drives</a> may feel<a href="http://www.china-3dglasses.com">3d glasses</a> aching in our head.<a href="http://www.onlineusb.net/cartoon-usb-flash-drives-c-13.html">Cartoon Usb Flash Drives</a>We can seek <a href="http://www.onlineusb.net/custom-shapes-usb-flash-drives-c-10.html">Custom Shaped Usb Flash Drives</a> something about <a href="<a href="http://www.topusbdrive.com/oem-usb-leather-usb-drives-c-4_23.html">Leather USB Drives ="<a href="http://www.topusbdrive.com/oem-usb-pen-usb-drives-c-4_31.html">Pen USB Drives </a>="<a href="http://www.topusbdrive.com/brand-usb-sandisk-c-3_13.html>sandiskusb</a> ="<a href="http://www.topusbdrive.com/brand-usb-transcend-c-3_15.html>transcend usb</a>=index&cPath< href="<a href="http://www.topusbdrive.com/brand-usb-adata-c-3_7.html>adata usb</a> The cast <a href="<a href="http://www.topusbdrive.com/brand-usb-adata-c-3_7.html>adata usb</a>href="http://www.oemusb.org">oem usb</a>Glasses is actual nice. And we see abounding cinemas accept this brand, but it is too expensive. We can go to see Nvidai controlling shop, there are abounding bargain Abounding of them fit the amateur player. announcement approach of Nvidai is actual generally in PC and has absolutely acceptable effect. There is something appropriate in authoritative the Bracelet USB Drivess, such as the abnormality of colors. It is a stereoscopic imaging technology. Now we charge to mix some assorted colors together.

    9. Favicon of http://www.swissonlinewatches.com/ BlogIcon replica watches 2011.02.17 17:55 신고 Address Modify/Delete Reply

      정답은 없다. 각자의 장단점이 존재하기 때문에 두 가지의 장단점을 비교해 선택을 하면 그뿐이다.

    10. Favicon of http://www.hairghdstore.com/ BlogIcon ghd cheap 2011.02.22 17:45 신고 Address Modify/Delete Reply

      IIS를 이용한 웹 프로젝트와 VS 2005부터 새롭게 내장된 ASP.NET Development Server 모두를 사용하여 개발할 수 있다는 가벼운 얘기이네요. ^^;;

    11. Favicon of http://www.jewelrybeadsale.com/ BlogIcon pandora jewelry 2011.02.23 18:30 신고 Address Modify/Delete Reply

      수행, 작물 및 레이크가 수 수확 ". 그래서 올해의 수확, 그리고 몇 일 후 오페라 팀 수행, 랴오닝 오페라 극단 시작 되었습니다.

    12. Favicon of http://www.monclersaleonline.uk.com/moncler-women-s-vests.html BlogIcon ling 2011.06.17 10:07 신고 Address Modify/Delete Reply

      However, does that necessarily mean http://www.monclersaleonline.uk.com/moncler-outlet.html that Axe whole body Spray may be the best option between http://www.monclersaleonline.uk.com/moncler-sale.html low cost fragrances? Yes, it does smell nice, but it's http://www.monclersaleonline.uk.com/moncler-women-s-coats.html nevertheless http://www.monclersaleonline.uk.com/moncler-men-s-coats.html not really a cologne, on the minimum not while in the specialized sense. Why? Well, colognes consist of a more powerful mixture of ingredients. whole body sprays usually create utilization of the
      http://www.monclersaleonline.uk.com/moncler-women-s-vests.html great offer more substance ingredients to create their pleasant aromas.

    13. Favicon of http://www.rockheadphone.com/monster-beats-inear-c-19.html BlogIcon Monster Beats In-Ear Headphone 2011.11.02 11:57 신고 Address Modify/Delete Reply

      Monster Beats Solo Headphone

      http://www.rockheadphone.com/monster-beats-studio-c-23.html Monster Beats Studio Headphone

      http://www.rockheadphone.com/monster-beats-tour-c-26.html Monster Beats Tour Headphone With ControlTalk


      http://www.rockheadphone.com/monster-beats-inear-c-19.html Monster Beats In-Ear Headphone

      http://www.rockheadphone.com/monster-beats-overear-c-20.html Monster Beats Over-Ear Headphone

      http://www.rockheadphone.com/monster-beats-artist-c-21.html Monster Beats Artist Headphone

      http://www.rockheadphone.com/monster-beats-pro-c-22.html Monster Beats Pro Headphone

      http://www.rockheadphone.com/monster-beats-solo-hd-c-25.html Monster Beats Solo HD Headphone

    14. Favicon of http://www.btclothes.com/ BlogIcon mens gucci shoes 2011.11.16 09:14 신고 Address Modify/Delete Reply







      This is a very unique article, write their own style,
      which is an impressive article, written by their own
      style and characteristics, each one has their own
      unique article content and features, we all want
      their own articles to show their own characteristics,
      be able to fully express their own point of view,
      the performance characteristics of their own, have
      their own characteristics, these are important.
      <br/><a href="http://www.btclothes.com/" rel="nofollow">gucci sandals</a>
      <br/><a href="http://www.btclothes.com/" rel="nofollow">gucci shoes wholesale</a>
      <br/><a href="http://www.btclothes.com/" rel="nofollow">mens gucci shoes</a>
      <br/><a href="http://www.btclothes.com/" rel="nofollow">gucci slipper</a>
      <br/><a href="http://www.btclothes.com/" rel="nofollow">Gucci men shirts</a>
      <br/><a href="http://www.btclothes.com/" rel="nofollow">Gucci cap</a>
      <br/><a href="http://www.btclothes.com/" rel="nofollow">Gucci Jeans</a>






    15. Favicon of http://www.btclothes.com/ BlogIcon mens gucci shoes 2011.11.16 09:15 신고 Address Modify/Delete Reply

      http://www.btclothes.com/

    16. Favicon of http://www.shopsshoes.com/ BlogIcon Cheap Gucci shoes 2011.11.16 09:15 신고 Address Modify/Delete Reply

      http://www.shopsshoes.com/
      <br/><a href="http://www.shopsshoes.com/" rel="nofollow">mens gucci shoes</a>
      <br/><a href="http://www.wholesalegucci-shoes.com/" rel="nofollow">wholesale gucci shoes</a>








    17. Favicon of http://www.drdreheadphone.biz/beats-by-drdremonster-studio-headphonessilver-p-.. BlogIcon Dr Dre Beats silver Studio 2011.12.08 15:45 신고 Address Modify/Delete Reply

      http://www.drdreheadphone.biz/monster-butterfly-by-vivienne-c-8.html Monster Butterfly by Vivienne Tam Dr Dre Beats Butterfly by vivienne tam

      http://www.drdreheadphone.biz/specials.html Monster Beats special Dr Dre Beats Special

      http://www.drdreheadphone.biz/beats-by-drdremonster-studio-headphonesblack-p-19.html Beats by dr dre studio black Monster Beats by Dre Studio

      http://www.drdreheadphone.biz/beats-by-drdremonster-studio-headphonesred-p-31.html Red Dr Dre Beats Studio Headphone Beats by dre studio headphone

      http://www.drdreheadphone.biz/beats-by-drdremonster-studio-headphonessilver-p-18.html Dr Dre Beats silver Studio Beats by dre studio sliver

      http://www.drdreheadphone.biz/beats-by-drdremonster-tour-headphonesblack-p-17.html Monster beats tour black Dr Dre Beats tour black

      http://www.drdreheadphone.biz/beats-by-drdremonster-tour-headphonessilver-p-16.html Beats by dre tour black headphone Dr Dre Beats tour black headphone

      http://www.drdreheadphone.biz/monster-beats-by-dr-dre-justbeats-solo-headphones-purple-p-5.html Dr Dre Beats solo hd headphone Beats by dre justin bieber solo hd edition

      http://www.drdreheadphone.biz/monster-beats-by-drdre-studio-diamond-red-p-4.html Beats by dre studio diamond headphone Dr Dre Beats diamond headphone

      http://www.drdreheadphone.biz/monster-beats-by-drdre-studio-diamond-silver-p-2.html Dr Dre Beats Studio Diamond Sliver Beats by dre studio diamond sliver

      http://www.drdreheadphone.biz/monster-beats-ferrari-limited-edition-red-and-yellow-p-24.html Dr Dre Beats Ferrari studio headphone Beats by dre studio ferrari headphone

      http://www.drdreheadphone.biz/monster-beats-kobe-bryant-limited-edition-p-26.html Dr Dre Beats kobe 24 studio headphone Beats by dre kobe 24 edition headphone

      http://www.drdreheadphone.biz/monster-beats-lamborghini-limited-edition-yellow-p-28.html Dr Dre Beats Lamborghini yellow Beats by dre lamborghini studio edition

      http://www.drdreheadphone.biz/monster-beats-lebron-james-limited-edition-p-25.html Monster beats lebron james studio headphone Dr Dre Beats Lebron james studio

      http://www.drdreheadphone.biz/monster-beats-miles-davis-tribute-inear-speakers-p-23.html Beats by dre miles davis tribute Dr Dre Beats Miles Davis

      http://www.drdreheadphone.biz/monster-beats-solo-hd-black-headphones-with-control-talk-p-12.html Beats by dre solo hd headphone Dr Dre Beats solo hd headphone

      http://www.drdreheadphone.biz/monster-beats-solo-hd-red-headphones-with-control-talk-p-10.html Dr Dre Beats Solo HD Red Headphone Dr Dre Beats solo hd headphone

      http://www.drdreheadphone.biz/monster-beats-solo-hd-silver-headphones-with-control-talk-p-11.html Monster beats solo hd sliver headphone Dr Dre Beats solo hd headphone sliver

    18. Favicon of http://uuo.saclongchampxl.com/ BlogIcon sac longchamp solde 2013.04.10 22:16 신고 Address Modify/Delete Reply

      우리에게 가장 쓸모없는 날은 웃지 않는 날이다.

    C# 성능 튜닝 - Array

    DotNet 2008.11.24 11:45 |

    출처 :http://www.hoons.kr/Board.aspx?Name=cshaptip&Mode=2&BoardIdx=17191&Key=&Value=


    using (Image img = Image.FromFile(filePath))

    {

        for (int x = 0; x < img.Width; x++)

        {

            for (int y = 0; y < img.Height; y++)

            {

                //Do something

            }

        }

    }


    위의 코드를 살펴보자.

    여기서 using 은 using 안에서 생성한 오브젝트가 유효한 범위를 말한다.
    즉 using 이 끝나는 시점에서 생성한 오브젝트의 dispose() 가 호출된다.(물론 이 객체는 IDispose 인터페이스를 구현하고 있어야 한다)

    여기서 유심히 볼 부분은 for 문인데, 루프 한번 돌때 마다 아래와 같은 작업이 일어난다.

    1. x < Image.Width 검사
    2. 이미지 객체 참조
    3. Width 속성이 있는지 검사
    4. Width 값 읽기
    5. Width 값 리턴
    6. 루프 계속 진행

    위의 단계를 줄여 속도를 높인 코드가 아래 있다.

    using (Image img = Image.FromFile(filePath))

    {

        int width = img.Width;

        int height = img.Height;

        for (int x = 0; x < width; x++)

        {

            for (int y = 0; y < height; y++)

            {

                //Do something

            }

        }

    }



    오브젝트 array 를 다룰 때도 마찬가지다. 아래처럼 쓰는 것이 더 빠르다.

    SomeObject[] objList = new SomeObject[1000];

    int count = objList.Length;

    for (int i = 0; i < count; i++)

    {

        SomeObject obj = objList[i];

        //Do something

    }



    그런데...foreach 는 어떨까?

    foreach (SomeObject obj in objList)

    {

        //Do something

    }


    foreach 가 더 빠를 것 같지만 사실 그렇지 않다. for 를 사용하고 그 길이를 변수에 저장하고 내부에서 casting 해서 사용하는 것이 더 빠르다.

    여기서...갑자기 궁금해서 검색을 해봤더니 http://www.madprops.org/blog/for-vs-foreach-performance/ 이 글에서 테스트를 했다. 약 3배차이가 났다...오우


    한번 쯤 이런 실수들을 해봤을 것이다.
    아래는 리스트를 비우는 코드다.

    List<SomeObject> objList = new List<SomeObject>();

    //Add object to list

    int count = objList.Count;

    for (int i = 0; i < count; i++)

    {

        objList.RemoveAt(i);

    }


    하지만 이 코드는 에러가 난다.
    하나의 리스트 항목을 삭제하면 objList.Count 값이 매번 달라지기 때문에 i 가 인덱스 하는 범위가 Count 의 범위를 넘어선다.

    그래서 거꾸로 루프를 돌아야 한다.

    List<SomeObject> objList = new List<SomeObject>();

    //Add object to list

    int count = objList.Count;

    for (int i = count - 1; i > 0; I--)

    {

        objList.RemoveAt(i);

    }


    다른 좋은 방법이 있다.

    while (objList.Count > 0)

    {

        objList.RemoveAt(0);

    }


    위의 루프에서는 objList.Count 에 매번 접근하고 있다. 이글의 맨처음에 언급한 내용에 따르면
    이 루프는 느리다. 그래도 보다 안정적이다. 이 코드는 어느경우에서든 리스트를 깨끗히 비워준다.

    신고

    'DotNet' 카테고리의 다른 글

    NameValueCollection : 중복키를 허용하는 key-value pair collection  (0) 2009.10.13
    C# Goto Statement  (3) 2009.04.17
    C# 성능 튜닝 - Array  (7) 2008.11.24
    c# 성능 튜닝 - 문자열  (0) 2008.11.24
    C# 용 Zip 라이브러리 - #ZipLib  (2) 2008.03.07
    Directshow.net Library  (0) 2008.01.29

    댓글을 달아 주세요

    1. Favicon of http://redcarrot.tistory.com BlogIcon 빨간당무 2009.08.18 04:24 신고 Address Modify/Delete Reply

      잘 봤습니다. 특히 마지막에 리스트를 비우는 부분에서 많은 사용자들이 흔하게 오류를 범하는 것을 볼 수 있었던것 같습니다. ^^
      참고로 저도 리스트를 비우는 것과 관련되서 학습하다

      while (objList.Count > 0)
      {
      objList.RemoveAt(0);
      }
      보다 더 좋은 방법을 알게 되어 코멘트 달아 봅니다. ^^

      objList = new List<SomeObject>();
      즉, 다시 생성해 주는 거지요. 물론 가비지컬렉터가 지원되는 언어야만 메모리 누수가 없겠지요 ^^;;;

      • 무쇠다리 2009.08.20 12:24 신고 Address Modify/Delete

        생각해 보니 말씀해 주신 방법도 좋은 방법이겠네요.
        어차피 가비지콜렉터가 동작할때나 메모리가 해제되니까..
        reomove 를 하든 새로 만들든 GC 가 동작하기전에는 모두 메모리를 차지 하고 있을테니...

    2. xeroplus 2010.12.08 09:27 신고 Address Modify/Delete Reply

      처음의 경우는 신기하네요

      보통 C++ 컴파일러등에서는 컴파일러에서 처리해 주는데

      C# 컴파일러 성능은 떨어지는듯

      • 무쇠다리 2010.12.14 10:19 신고 Address Modify/Delete

        컴파일러? => 런타임 아닌지요.

        c#의 성능 문제는 그리 심각한 것은 아니라고 생각합니다.
        머신의 성능이 좋아져서, 이제는 생산성과 유지보수성이 우수한 쪽이 이슈가 아닐까요.
        그러고 보니 그동안 성은에 대해서는 좀 잊고 살았네요.

    3. 버섯돌이 2011.01.05 11:31 신고 Address Modify/Delete Reply

      위에 xeroplus 님이 말씀하시는 건...
      런타임시의 성능을 말씀하시는게 아니라
      코드를 저런식으로 작성하더라도 컴파일 시점에 왠만한 옵티마이즈 기능을 수행해준다는거겠죠?

      컴파일 최적화 기능을 비활성화 한 뒤에 실행하면 차이가 나겠지만..
      그렇지 않다면 기본적인 최적화 기능을 수행하기때문에
      최종 생성된 소스에서는 첫번째 처럼 작성하더라도
      최종 컴파일된 소스는 후자 처럼 최적화 되어 있다는 의미로 말씀하신게 아닐까 싶네요.

      다만, 코딩 습관시 컴파일러는 만능은 아니기때문에 방어 차원에서 적용하는 부분도 있고..
      요즘은 말씀하신것 처럼 머신의 성능이 좋아져서 최적화 위주의 코드보다도
      사람이 알기 쉬운 코드를 작성하는 쪽에 포커스를 맞추기도 합니다.
      적절히 섞어서 사용하겠지요..^^

      • 무쇠다리 2011.01.14 10:15 신고 Address Modify/Delete

        네 그렇군요.
        컴파일러가 최적화 해주는 것을 말씀하신듯 합니다.

        좋은 지적 감사합니다.

    4. Favicon of http://mop.scarpehoganil.com/ BlogIcon hogan 2013.04.10 23:30 신고 Address Modify/Delete Reply

      행운 만이 개인 능력 당신이 일생 동안 도와 드릴까요 평생 할 수 없습니다 않습니다.

    출처 :http://www.hoons.kr/Board.aspx?Name=cshaptip&Mode=2&BoardIdx=17164&Key=&Value=

    String vs StringBuilder

    스트링 사용시 많은 프로그래머가 아래와 같은 코딩을 합니다.

    String output = "";

    output += "Hello";

    output += " ";

    output += "World";


    스트링과 스트링을 연결하는 "+" 연산자가 어떻게 동작하는지 살펴보면

    Char[] tempValue = new Char[output.Length + "Hello".Length];

    tempValue = output + "Hello";

    Array.Clear(output, 0, output.Length);

    output = null;

    output = new Char[tempValue.Length];

    output = tempValue;

    Array.Clear(tempValue);


    위와 같이
    연결할 문자열길이 만큼의 임시 메모리를 할당하고, 그 안에 연결된 문자열을 복사해 옮깁니다.
    그 다음에 원본 문자열을 없애고 원본 변수에 새로운 문자열 크기 만큼의 메모리를 할당합니다.
    그 다음에 임시 메모리에 옮겨두었던 문자열을 모두 복사해 이동시키고, 임시 메모리를 해제 합니다.

    이처럼 "+" 연산자 하나를 쓸때마다 위와 같은 작업을 컴퓨터가 수행하게 됩니다.

    따라서 "+" 보다는 가변 문자열을 사용하는 StringBuilder 를 사용하는 것이 더 좋은 성능을 내줍니다.
    스트링빌더는 임시 메모리 할당을 하지 않고 스트링을 링크시켜 연결합니다.
    즉 "hello" 에 "world"를 append 하면 둘을 합친 새로운 스트링을 만들지 않고 hello 와 world 를 바로 연결합니다.(linked list 처럼..) 그래서 toString() 을 호출할때 만 링크를 결합한 새로운 스트링을 만들어 리턴합니다.
    그래서 성능이 우수하죠.

    String = “xxx” + yyy + “ “ + zzz

    스트링을 특정 형식으로 구성할 때 위와 같은 문자연결 보다는
    string.Format 을 사용하는 것이 좋다. 이 매소드는 내부적으로 StringBuilder 를 사용한다.

    String.Format("xxx{0} {1}", yyy, zzz);


     만약 형식이 없이 단순히 스트링을 연결하는 것만 필요하다면 string.Concat 을 사용하는 것이 좋다.

    String.Concat("xxx", yyy, zzz);



     String.Equals vs "=="


    두개의 문자를 비교할 때 흔히 '==' 비교 연산자를 사용한다.
    두개의 문자를 대소문자 구분없이 비교하기 위해서 아래와 같은 코드를 주로 사용하는데..

    String source = "abcdef";

    String compareValue = "Abcdef";

    if (source.ToLower() == compareValue.ToLower())

    {

        //Do something

    }


    이 코드 처럼 toLower 나 toUppder 의 도움을 받아 비교하게 되면 두개의 임시 메모리가 할당 된다.

    위의 코드 보다는 object 를 직접 비교하는 Equals 메소드가 좋다.
    if (source.Equals(compareValue, StringComparison.OrdinalIgnoreCase))


    스트링 값이 비었는지 검사할 때

    String source = "";

    if  ((source != null) && (String != ""))

    {

        //Do something

    }


    위의 코드 처럼 스트링을 담는 변수가 null 혹은 string.Empty 인지 복잡하게 코딩하는 것 보다
    string 내장 함수인 IsNullOrEmpty 를 사용하는 것이 직관적이고 편하다.

    if (String.IsNullOrEmpty(source))

    {

        //Do something

    }



    참고로 StringBuilder 를 사용할 때 MaxCapacity 를 지정하는 것이 훨씬 빠르다고 한다.

    신고

    'DotNet' 카테고리의 다른 글

    C# Goto Statement  (3) 2009.04.17
    C# 성능 튜닝 - Array  (7) 2008.11.24
    c# 성능 튜닝 - 문자열  (0) 2008.11.24
    C# 용 Zip 라이브러리 - #ZipLib  (2) 2008.03.07
    Directshow.net Library  (0) 2008.01.29
    Timer 사용하기  (3) 2007.06.21

    댓글을 달아 주세요

    이벤트 로그에 쓰기 : http://msdn.microsoft.com/ko-kr/library/07347hdt.aspx
    asp.net 오류 발생시 처리 : http://msdn.microsoft.com/ko-kr/library/ms972399.aspx
    asp.net 오류 정보 표시하기 : http://msdn.microsoft.com/ko-kr/library/cc438055(VS.71).aspx
    오류 처리 순서에 대해 설명이 나와있는 내용 : http://support.microsoft.com/kb/306355/ko

    대충 정리하면

    page_Error 에서 Server.ClearError() 를 호출하지 않으면
    applicaton_Error 로 넘어가고 거기서도 Server.ClearError 를 처리 하지 않으면
    web.config 에 설정한 대로 최종 처리된다는 이야기 인 듯...

    어디서 오류 기록을 남길 것인지 선택만 하면 되겠네...





    신고

    댓글을 달아 주세요

    출처 : How to get the CheckBoxlist Value using Javascript?

    왜 그런지 모르겠지만..
    체크박스 리스트는 add 메소드로 아이템을 추가 할때 그 값을 지정할 수 있는데
    html 로 렌더링 될때 value 가 표현되지 않아서 자바스크립트로 접근할 때 그 값이 나오지 않는다.

    누가 그랬을까?

    그래서 CheckBoxlist 를 좀 변경해서 이 놈이 랜더링 할 때 value 속성도 랜더링하게 고쳐쓴다.

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Globalization;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    namespace CheckBoxListExCtrl
    {
    public class CheckBoxListExCtrl :CheckBoxList, IRepeatInfoUser

    void IRepeatInfoUser.RenderItem(ListItemType itemType, int repeatIndex, RepeatInfo repeatInfo, HtmlTextWriter writer)
    {
         writer.WriteBeginTag("input");
        writer.WriteAttribute("type", "checkbox");
                writer.WriteAttribute("name", UniqueID + this.IdSeparator + repeatIndex.ToString(NumberFormatInfo.InvariantInfo));
                writer.WriteAttribute("id", ClientID + this.ClientIDSeparator + repeatIndex.ToString(NumberFormatInfo.InvariantInfo));
                writer.WriteAttribute("value", Items[repeatIndex].Value);
                if(Items[repeatIndex].Selected)
                    writer.WriteAttribute("checked",  "checked");
                System.Web.UI.AttributeCollection attrs = Items[repeatIndex].Attributes;
                foreach (string key in attrs.Keys)
                {
                    writer.WriteAttribute(key, attrs[key]);
                }
                writer.Write(">");
                writer.Write(Items[repeatIndex].Text);  }
    }
    }

    CheckBoxListExCtrl 이란 클래스를 하나 정의하고 CheckBoxlist 를 상속받고 CheckBoxlist 가 체크박스 아이템을 하나씩 렌더링할때 쓰는 RenderItem 메소드를 재정의 해버리자.

    protected void PopulateCheckBoxListExCtrl()
    {
       CheckBoxListExCtrl.DataSource = DtRecords;//DataTable DtRecords from DB
       CheckBoxListExCtrl.DataTextField ="Column1";
       CheckBoxListExCtrl.DataValueField ="Column2";
       CheckBoxListExCtrl.DataBind();
    }

    그 담에 그냥 체크박스리스트 쓰던 방식으로 걍 바인딩한다.

    그럼 이제 자바스크립트로도 그 값을 참조할 수 있게 되었다.
    신고

    댓글을 달아 주세요

    http://support.microsoft.com/default.aspx?scid=kb;en-us;329065

    결국 인덱스 서비스의 문제 였나 보구나...

    CAUSE

    If you run Index Server (Cisvc.exe), then Index Server may rescan the Temporary ASP.NET Files directory while it requests a Microsoft ASP.NET page. Cisvc.exe then holds a lock on the Temporary ASP.NET Files directory for one to five minutes. The length of time of the lock depends on the size of the directory that causes the Aspnet_wp.exeprocess (or W3wp.exe process for applications that run on Microsoft Internet Information Services [IIS] 6.0) to not load the particular DLL.

    RESOLUTION

    If you do not use Index Server on the server, you can disable it. To do so, follow these steps:
    1. Click Start, and then click Services.
    2. Locate Indexing Service from the list of services, and then click Indexing Service Properties from the subform.
    3. On the General tab of the Indexing Service Properties dialog box, in the Startup type drop-down item list, click Disabled.
    4. Click OK.

    If you use Index Server, you can exclude the Temporary ASP.NET Files directory from the folders that the Index Server scans. To do so, follow these steps:
    1. Click Start, point to All Programs, point to Administrative Tools, and then click Computer Management.
    2. Expand the Services and Applications node, expand the Indexing Service node, and then expand the System node.
    3. Right-click the Directories folder, point to New, and then click Directory from the subform to open the Add Directory dialog box.
    4. Click Browse, and then locate the Temporary ASP.NET Files directory. You typically find the Temporary ASP.NET files in the following path: c:\<WINDIR>\Microsoft.NET\Framework\<Version Number>\Temporary ASP.NET Files
    Note<Version Number> is the version of .NET Framework installed on your computer.
    5. Click No under the Include in Index? option buttons.
    6. Click OK to close.
    7. Close the Computer Management dialog box.
    8. Restart the Indexing Services service.

    참고로 인덱스 서비스 처럼 주기적으로 스캔하는 서비스가 존재할 경우 위와 같은 증상이 나타날 수 있다.
    asp.net temp 폴더는 그 대상에서 제외해 주어야 할 듯..
    신고

    댓글을 달아 주세요

    솜이슬님의 블로그에서
    처음 만나는 익스프레션 블랜드를 이용한 실버라이트2 포스트를 발견하고 링크한다.
     
    이 포스트는 스캇구스리 아저씨의 글을 번역한 것인데, 매우 흥미롭다.
    블랜드로 실버라이트2를 연습해 보기 아주 좋은 예제인듯 한다.
    wpf 에서 사용하던 INotifyPropertyChanged 인터페이스와 ObservableCollection, Binding Direction 등의 개념을 이해하기 좋은 예인 듯 하다.

    시간을 내서 따라하기라도 좀 해봐야지...
    신고

    댓글을 달아 주세요

    출처 : http://msdn.microsoft.com/en-us/library/ex526337.aspx

    asp.net 에서는 특별한 목적으로 예약된 이름의 폴더들이 있는데 그 리스트 아래와 같다.

    노트 : 아래의 폴더들은 ,App_Theme 를 제외하고, http 요청에 응답하지 않는다.
    즉, 폴더안에 파일이 존재하더라도 http 요청으로 실행되지 않으며, 단지 코드상에서만 접근할 수 있다.
    • App_Browsers
    • App_Code
    • App_Data
    • App_GlobalResources
    • App_LocalResources
    • App_Themes
    • App_WebReferences
    • Bin

    App_Browsers

    .browser 파일을 담고 있는 곳으로 , 각 브라우저를 식별하고 각 브라우저의 기능들을  알아내는 역할을 한다.
    관련 정보는  Browser Definition File Schema (browsers Element) 와 How to: Detect Browser Types in ASP.NET Web Pages 를 보기 바란다.


    App_Code

    .cs 파일 같은 코드 파일이 위치하는데, 이 곳에 존재한는 파일은 수정 후 따로 컴파일을 하지 않아도
    수정후 첫번째 Request 가 들어올 때 재 컴파일 된다. (참 특이한 폴더다)
    내부적으로 서브 폴더도 갖을 수 있으며 그 안에 파일도 런타임시 수정된 부분이 있으면 컴파일 된다.
    더 알고 싶으면, Shared Code Folders in ASP.NET Web Sites 와 codeSubDirectories Element for compilation (ASP.NET Settings Schema) 를 참고하면 된다.

    App_Data

    MDF 나 XML 파일같은 데이타 소스 파일을 포함할 수 있다.
    어플리케이션 내부의 멤버십이나 롤 정보를 관리하는 데이타 저장소로 사용할 수 있다.
    역시 자세한 것은  Introduction to Membership 와 Understanding Role Management 를 참고.


    App_GlobalResources

    .resx 나 .resources 파일이 위치할 수 있다.
    전역 scope 의 어셈플리로 컴파일 되어 어디서나 접근할 수 있다.
    ASP.NET Web Page Resources Overview 참고


    App_LocalResources

    .resx 나 .resources 파일이 위치할 수 있다.
    특정 페이지나 유저컨트롤, 마스터페이지에서 만 사용되는 리소스파일들.
    위에 링크 참고

    App_Themes

    스킨과 관련된 것으로 아는데..이 방식을 별로 선호하지 않아서 패스
    ASP.NET Themes and Skins Overview 참고


    App_WebReferences

     wsdl, .xsd, .disco,.discomap 파일등 웹에서 참조용으로 쓰이는 파일들의 집합소.
     큰 관련은 없어보이지만 ,  Web Services Description Language Tool (Wsdl.exe)

    Bin

    컴파일 된 dll 어셈블리가 모이는 곳. 이곳에 dll 이 존재하면 자동 참조된다.
    http://msdn.microsoft.com/en-us/library/t990ks23.aspx 참고


    기타 참고용 링크
    Administering ASP.NET Web Sites.
    Managing Authorization Using Roles.


    쓸만한 정보인가 싶어 쭉 봤더니...뭐 큰 도움은 안된다..ㅎㅎ

    신고

    댓글을 달아 주세요

    출처 : http://mattberseth.com/blog/2007/05/ajaxnet_example_using_an_updat.html
    데모보기 : http://mattberseth2.com/progress_indicator/

    참고 : ajax.net Animation Reference


    검색버튼을 누르면 리스트가 희미해지고 정 중앙에 로딩중을 표시하는 gif 애니메이션 이미지가 올라온다.
    검색결과가 리턴되고 업데이트 판넬이 새로 랜더링되면 리스트는 원래의 투명도로 돌아오고 로딩이미지는 사라진다.

    이것을 구성하기위해 updatepanel,grid-view,updatepanelAnimationExtender(upax) 를 사용한다.

    1. updatepanel 의 트리거 이벤트 발생
    2. upax 의 OnUpdating 처리
        - <parallel> 은 각 애니메이션이 각각의 타이머를 갖고 독립적으로 수행된다는 것임(동시실행)
        - duration=0 은 애니메이션 처리가 즉각 발생한다는 것임,시간을 지정하면 그 시간동안 천천히 애미메이션됨.
        - 즉 , onUpdating 이란 스크립트의 호출 , btnSearch 버튼의 비활성화, updatePanel1 의 투명도를 50% 로 하는 애니메이션을 동시에 수행함.
        - onUpdating 스크립트는 중앙에 로딩 이미지를 위치시키는 역할을 함.

    3. btnSearch 의 클릭 이벤트 처리로 그리드뷰가 새로 바인딩
    4. updatePanel1 의 refresh(update)
    5. upax 의 OnUpdated 처리
       - 투명도 Fade-In
       - btnSearch 활성화
       - onUpdated 스크립트 call - 로딩중 이미지 감추기

    여기서..

    function onUpdating(){
            // get the update progress div
            var updateProgressDiv = $get('updateProgressDiv');
            // make it visible
            updateProgressDiv.style.display = '';

            //  get the gridview element       
            var gridView = $get('<%= this.gvCustomers.ClientID %>');
           
            // get the bounds of both the gridview and the progress div
            var gridViewBounds = Sys.UI.DomElement.getBounds(gridView);
            var updateProgressDivBounds = Sys.UI.DomElement.getBounds(updateProgressDiv);
           
            //    do the math to figure out where to position the element (the center of the gridview)
            var x = gridViewBounds.x + Math.round(gridViewBounds.width / 2) - Math.round(updateProgressDivBounds.width / 2);
            var y = gridViewBounds.y + Math.round(gridViewBounds.height / 2) - Math.round(updateProgressDivBounds.height / 2);
           
            //    set the progress element to this position
            Sys.UI.DomElement.setLocation (updateProgressDiv, x, y);       
        }



    AJAX.Net 도 스크립트로 직접 핸들링할 수 있는 방법을 제공하고 있음을 알 수 있다.
    하지만 YUI 보다는 왠지 답답함을 느낀다.


    신고

    댓글을 달아 주세요

    1. Favicon of http://www.herbbab.com BlogIcon 이쁜이 2008.05.11 21:55 신고 Address Modify/Delete Reply

      아이낳기 전엔 정말이지 저도 한몸매 했어요.
      믿어주세요~~
      산후에 수유하는 동안 정말 너무 맘놓고 먹었던게 잘못이었나봐요.
      수유기간이 끝나고도 1년이 한참 지났는데도 살이 빠지지가 않았어요~~
      붓기도 안빠져서 그대로 살로 남은거 같았어요.
      창피해서 밖에도 못나가고 살았는데, 친구로부터 전해받은 쉐이크를
      한달동안 사용하고 희망을 찾았답니다.
      산후에 불어난 23kg의 살들이 한달만에 12kg이 줄어들었거든요.
      그렇게 석달후에는 아이낳기전보다 더 괜찮은 몸매로 돌아왔구요.
      얼굴에 내려앉은 다크써클도 없어지고 변비, 위염, 손발저림까지
      좋아졌답니다.
      믿어지시나요? 저의 이런 노하우 궁금하지 않으세요?
      네이버에 허브밥 치세요. www.herbbab.com 이랍니다.

    2. Favicon of http://lasttrain.tistory.com BlogIcon LAST TRAIN 2008.05.12 11:28 신고 Address Modify/Delete Reply

      형~ 저도 씨폴더 회원가입했습니다. 오우...천국이 따로 없네요..씨폴더~ㅋㅋㅋㅋ

    3. Favicon of http://lasttrain.tistory.com BlogIcon LAST TRAIN 2008.05.12 11:29 신고 Address Modify/Delete Reply

      위에 이쁜이씨는 아는분이세요?? 가보니까 허벌난 인생사이트 나오네....

    출처 : http://mattberseth.com/blog/2007/06/quick_ajax_tip_provide_a_bette.html

    데모보기 : http://mattberseth2.com/ajaxified_wizard/

    앞에 포스팅한 http://mattberseth.com/blog/2007/05/ajaxnet_example_using_an_updat.html 의 응용되겠다.
    신고

    댓글을 달아 주세요

    출처 :http://www.codeproject.com/KB/ajax/DelayedContentLoading.aspx

    updatepanel,timer,multi-view,rss-toolkit 를 사용한 좋은 예제인 것 같다.

    멀티뷰와 업데이트 판낼을 사용해 비동기 요청의 상태를 변화시키는 것은 좋은 생각인듯

    신고

    댓글을 달아 주세요

    출처 :http://blog.markerstudio.com/archives/450


    updatepanel 의 트리거로 지정된 컨트롤(링크버튼 같은...)의 포스백 스크립트를 호출해서
    강제로 업데이트판넬을 refresh 할 수 있다.

    보통 트리거인 컨트롤의 이벤트 발생시 __doPostBack('컨트롤아이디') 함수가 호출되는 것을 볼 수 있다.
    즉 이 포스트백 스크립트를 호출해서 트리거 컨트롤의 포스백을 유도하고 이에 연결된 업데이트판넬의 업데이트를 유도하는 것이다.

    정리하면,

    1. 버튼을 하나 둔다.css 로 보이지 않게 숨긴다.
    2. 버튼을 업데이트판넬의 트리거로 지정한다.
    3. 필요한 스크립트에서 __doPostBack(버튼아이디) 호출한다.

    이렇게 한다는 것이다.
    신고

    댓글을 달아 주세요

    1. Favicon of http://www.topluxwatch.com BlogIcon Rolex Daytona 2011.07.18 11:37 신고 Address Modify/Delete Reply

      This article is really great, strong support

    티스토리 툴바