달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
반응형


ASP TimeOut Error(408 Error)

1. ASP 스크립트 타임아웃
Option Explicit 상위에 선언하면 안됩니다.
하단에 Server.ScriptTimeOut = 600 (90초 Default)

 

2. DB 명령 수행시 타임아웃
연결시간초과, 수행시간초과 등으로 ASP페이지 실행이 종료됩니다.
명령수행시간 초과인 경우 DB를 오픈 하기 전에 DB.CommandTimeOut = 180 (30초 Default)


3. IIS 메타베이스 편집(IIS 속성에서도 수정 가능)
 a. IIS6.0 콘솔에서 컴퓨터이름에서 속성 - 메타베이스 직접 편집 허용 체크합니다.
 b. %SystemRoot%\system32\Inetsrv\Metabase.xml 을 메모장등으로 엽니다.
 c. AspBufferingLimit="4194304"  값을 크게 변경합니다.  (단위는, byte입니다.)
 d. IIS를 Reset 한 후 확인합니다.

 

ASP 스크립트 제한시간
AspScriptTimeout="90" (초 단위)

ASP 세션 시간 제한
AspSessionTimeout="20" (분 단위)

IIS 연결 시간 제한
ConnectionTimeout="120" (초 단위)

[출처] [ASP] TimeOut Error|작성자 임갱

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

FormatDateTime(Date[,NamedFormat])

 

Date :

   필수적인 인수. 날짜식을 지정합니다

NamedFormat :

  선택적인 인수. 사용한 날짜/시간 형식을 나타내는 숫자 값입니다.

  이 인수를 생략하면 vbGeneralDate를 사용합니다.


NamedFormat 인수는 아래 설정을 가집니다.

상수

설명

---------------------------------------------
vbGeneralDate
0
날짜 또는 시간을 표시합니다. 날짜 부분이 있으면 간단하게 표시 날짜 형식으로 날짜를 표시하며, 시간 부분이 있으면 자세하게 표시 시간 형식으로 시간을 표시합니다. 날짜와 시간이 같이 있으면 두 부분을 모두 표시합니다.

---------------------------------------------
vbLongDate
1
컴퓨터의 국가별 설정에서 지정한 자세하게 표시 날짜 형식으로 날짜를 표시합니다.

---------------------------------------------
vbShortDate
2
컴퓨터의 국가별 설정에서 지정한 간단하게 표시 날짜 형식으로 날짜를 표시합니다

---------------------------------------------
vbLongTime
3
컴퓨터의 국가별 설정에서 지정한 시간 형식으로 시간을 표시합니다

---------------------------------------------
vbShortTime
4
24시간 형식(hh:mm)의 시간을 표시합니다.

 

예제 ---------------------------------------
FormatDateTime("2006-11-17 17:05:22", 0) => 2004-11-17 오후 5:05:22

FormatDateTime("2006-11-17 17:05:22", 1) => 2006년 11월 17일 목요일

FormatDateTime("2006-11-17 17:05:22", 2) => 2006-11-17

FormatDateTime("2006-11-17 17:05:22", 3) => 오후 5:05:22
FormatDateTime("2006-11-17 17:05:22", 4) => 17:22


ASP 의 경우 샘플 소스
예> 2010-03-19 오전 6시 이전까지만 노출하고 싶다하면~

<!-- 요이부터-->

<script type="text/JavaScript">
<!--
function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
 
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
//-->
</script>

   <%
   Dim OneDateTime : OneDateTime=FormatDateTime(Time(), 4)
      Dim SplitTimes : SplitTimes=Split(OneDateTime,":")
      SplitTimes(0) = CInt(SplitTimes(0))
    'Response.write "<br>hour:"&SplitTimes(0)
      if Date <= "2010-03-18" or (Date = "2010-03-19" and SplitTimes(0)<6) Then

   %>
   <div id="notice01" style="position:absolute;left:50px;top:50px;width=465px;height=345px;background-color:#ffffff;overflow:hidden;">
        <table width="465" border="0" cellspacing="0" cellpadding="0">
          <tr>
            <td><a href="javascript:MM_showHideLayers('notice01','','hide');" onFocus="this.blur()"><img src="./image/notice/notice.gif" width="465" height="413" border="0"></td>
            </tr>
          </table>
     </div>
      <%
      end if
      %>
      <!-- 요이까지-->


반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

무한루프에서 낭비되는 자원 절약을 위해 어플리케이션 종료를 위해 사용

서버의 스크립트 시간은 기본이 90초!!!
90초가 되도록 ASP 스크립트가 계속 실행한다면 서버는 응답을 하지 않고 질문내용처럼 에러페이지를 보여줌.


ASP 소스가 시작되는 맨 첫줄에 Server.ScriptTimeOut = 10000
10000 초동안 스크립트가 실행되도록 하는 설정

참고로 메일을 보내실때 IIS의 SMTP로 보내신다면 1000통씩 끊어서 보내시는게 좋

대~~ 누구 의견이야?? 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

FileSystemObject

Set fs = CreateObject("Scripting.FileSystemObject")

1. CreateTextFile 메서드
2. OpenTextFIle 메서드

파일시스템 객체의 메서드

> FileSystem 객체
(파일관련)
- CreateTextFile
- OpenTextFile
- CopyFile
- MoveFile
- DeleteFile
- FileExists

(폴더관련)
- CreateFolder
- CopyFolder
- MoveFolder
- DeleteFolder
- FolderExists
- GetFolder

(드라이브/파일)
- GetDrive
- GetDriveName
- GetFile
- GetFileName
----------------------------------------------------------
< CreateTextFile 메서드 >

새로운 텍스트 파일을 생성할때 CreateTextFile 메서드를 이용
이 메서드는 TextStream 객체를 리턴하며, 이 객체를 통해서 파일을 읽거나 쓸 수 있다.
옵션을 줄 수 있는데, 기존의 파일을 덮어 쓸 것인지 지정할 수 있다.

FileSystemObject.CreateTextFile [파일이름], [덮어쓰기], [유니코드]

[파일이름] : 생성하고자 하는 디렉토리와 파일 이름을 지정한다.
보통은 파일 이름만 지정하고 파일을 생성해도 별 지장은 없다.

[덮어쓰기] : 기존 파일(동일한 이름의 파일)을 덮어쓸 것인지를 지정한다.
true 값을 주면 기존 파일을 덮어쓰고, false 값이면 파일을 생성하지 않는다.
기본값은 true 인데, 만약 false 로 지정하였는데, 기존파일이 있다면 에러가 발생한다.

[유니코드] : 유니코드를 사용하는 파일로 만들 것인지 지정하는 것이다.
기본은 ASCII 파일로 생성한다.

<%
'객체 생성
set fs = CreateObject("Scripting.FileSystemObject")
'TextStream 객체 생성
set file = fs.CreateTextFile("C:\test.txt")
%>
----------------------------------------------------------
< OpenTextFile 메서드 >

기존의 텍스트 파일을 열려면 OpenTextFile 메서드를 이용한다.
이 메서드 역시 TextStream 객체를 리턴하며, 파일로부터 텍스트를 읽거나 쓸 수 있다.

FileSystemObject.OpenTextFile [파일이름], [파일속성], [생성여부], [포맷]

[파일속성] : 파일을 열때 어떤 모드로 열 것인지를 지정하는 것이다.
읽기/쓰기 모드를 지정하며, 기본값은 읽기만 된다.

[생성여부] : 파일이 없는 경우에도 파일을 생성하려면 여기에 true 값을 준다.
디폴트 값은 파일을 생성하지 않는다.

[포맷] : 기본 파일 포맷은 ASCII 이지만, -1 로 지정하면 유니코드(Unicode) 파일 포맷으로 열 수 있다.

<%
'객체생성
set fs = CreateObject("Scripting.FileSystemObject")
'TextStream 객체 생성
set file = fs.OpenTextFile("c:\test.txt")
'객체인지 확인
if IsObject(file) then
  Response.Write "C:\test.txt 파일을 열었음"
end if
%>
----------------------------------------------------------
< TextStream 객체 >

FileSystemObject 로 생성된 객체를 이용하여 TextStream 객체를 생성하고,
이렇게 넘겨받은(리턴) TextStream 객체럴 어떻게 이용할 것인지 알아보자.

파일을 열면 TextStream 객체를 리턴하는데, 이렇게 리턴받은 객체를 이용하여 텍스트 파일을 다루는 방법을 알아본다.

> TextStream 객체
(프로퍼티)
- Close  : 열린파일 닫기
- Read   : 파일에서 문자들을 읽어온다.
- ReadAll  : 하나의 문자열로 전체 파일 내용을 읽어온다.
- ReadLine : 파일에서 문자열로 한 줄을 읽어온다.
- Skip     : 파일을 읽을때 문자를 건너뛰고 무시한다.
- SkipLine : 파일을 읽을때 다음줄을 건너뛰고 무시한다.
- Write    : 파일에 문자를 쓴다.
- WriteLn  : 문자를 쓰고 파일에 새줄 문자를 쓴다.
- WriteBlankLines : 파일에 빈 줄을 만든다.

(메서드)
- AtEndOfLine   : 파일 포인터가 파일 줄 끝에 있으면 True 를 반환
- AtEndOfStream : 파일 포인터가 파일 끝에 있으면 True 를 반환
- Column : 파일에서 현재 문자의 열 번호를 리턴
- Line   : 파일에서 현재 줄 번호 리턴, 시작은 1

파일 객체를 다루는데 있어 사용하는 상수(실제값이 외우기 힘들어 상수로 지정)를 쓰려면,
선언부분에 메타데이터로 타입라이브러리를 선언해야 한다.

윈도우 2000 에서는
<!--METADATA type="typelib" file="c:\winnt\system32\scrrun.dll"-->
이며, 윈도우 XP 에서는
<!--METADATA type="typelib" file="c:\windows\system32\scrrun.dll"-->
이다.

주의할점은, 메타데이터의 경우, 무조건 읽혀지는 태그이기 때문에,
ASP 코드로 조건문을 작성하여 처리할 수 없다.
즉,
<% if 1=2 then %>
<!--METADATA type="typelib" file="c:\noexistfile.dll"-->
<% end if %>

라는 코딩이 있다면, ASP 스크립트의 조건문에 의해 처리되지 않을것 같지만,
메타데이터는 무조건 읽히는 서버사이드 태그이기 때문에 실제로 그 위치에 파일이 없으면 에러가 발생한다.

책에 의하면, scrrun.dll 에는 Dictionary 객체와 파일시스템 객체등이 구현되어 있다고 하며,
vbCRLF 같은 스크립트 상수등이 구현되어 있다고 하는데,
그렇다면..
실제로 윈도우 XP 이상에서는 scrrun.dll 상수를 불러오지 않아도, Dictionary 객체나 파일시스템 객체, vbCRLF 상수등을 사용할 수 있는것으로 보아
애초에, 설치시 포함되어 있는것으로 보여지며, 따라서, XP 이상에서는 메타데이터를 이용해 dll 을 포함하지 않아도 상관없을것으로 보인다.
그러나, 테스트결과, FileSystemObject 관련 상수는 메타데이타를 로드하지 않으면 에러가 발생한다.

TextStream 객체에서 자주 쓰이는 '덮어쓰기' 혹은 '생성여부' 와 관련되어 자주쓰이는 상수의 원래값을 알아보면
ForReading : 1
ForWriting : 2
ForAppending : 8
이다.

상수는, 숫자로 되어있는 원래의 값을 이해하기 쉽도록 변수명으로 미리 정의해 놓은 불변의 이름이다.

ForReading 은 읽기전용을 의미
ForWriting 은 쓰기용으로써, 없다면 새로 파일을 생성한다.
ForAppending 은 기존 내용에 덧붙여 쓰는 경우를 의미한다.

이 상수들을 scrrun.dll 로드없이 사용하려면 아래와 같이 하면 된다.
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

다음은, 파일을 열어 내용을 쓰는 경우의 코딩이다.

<!--METADATA type="typelib" file="c:\windows\system32\scrrun.dll"-->
<br>파일쓰기<br>
<hr>
<%
'파일경로
fname = server.mappath("test.txt")  'test.txt 라는 파일이 있다는 가정하에 현재 폴더경로에 test.txt 라는 파일명을 붙여서 반환한다.
'파일 시스템 객체생성, 파일생성.
set fs = server.createobject("scripting.filesystemobject")
set file = fs.createtextfile(fname, ForWriting)  'ForWriting 으로 선언했으므로, 파일이 없다면 생성한다.
'파일 내용 쓰기
file.WriteLine "이 파일은 " & fname & " 입니다"
file.WriteLine "파일 쓴 날짜는 " & date & " 입니다"
file.WriteLine "파일 쓴 시간은 " & time & " 입니다"
'파일 닫기
file.close
set file=nothing
set fs=nothing
response.write "'" & fname & "' 에 내용을 저장 하였습니다"
%>

위의 코딩은, 파일객체를 생성한후, 해당 파일이 없다면 새로 생성하고,
파일을 열어 한줄씩 내용을 입력한후 닫는 내용이다.
여기서, 주의할점은 파일을 열때 ForWriting 상수를 이용하였다는 것이다.
쓰기용으로 파일을 열면, 기존에 들어있던 내용은 지워지고, 첫줄부터 다시 작성된다.

따라서, 기존의 내용에 덧붙여 내용을 기록하고 싶다면, 첨부용으로 열어야 하는데,
이때 사용하는 상수가 ForAppending 이다.

그러나, 주의할점은, ForAppending 로 열경우에는, 만약, 해당 파일이 없다면 에러가 발생할 수 있다는 것이다.
따라서, 기존내용에 추가하기 위해 ForAppending 을 이용해 열려면, 먼저 파일이 있는지 체크해야 한다.
이때 사용하는 것이 file.Exists 이다.

파일이 존재하지 않으면, ForWriting 상수를 이용해 파일을 생성하여, 글을 쓰고,
파일이 존재한다면, 파일을 열때 ForAppending 상수를 이용해서 열어서 글을 추가해야 한다.

아래의 코딩은, 파일을 열어서 내용을 읽어오는 코딩이다.

<!--METADATA type="typelib" file="c:\windows\system32\scrrun.dll"-->
<br>파일 내용읽기<br>
<hr>
<%
'파일 경로구하기
fname = server.mappath("test.txt")
'파일 시스템 객체 생성 및 파일 열기
set fs = server.createobject("scripting.filesystemobject")
set file = fs.opentextfile(fname, ForReading)
'파일 내용 읽기
Do While Not file.AtEndOfStream
  txtLine = file.ReadLine
  Response.Write textline & "<br>"  '화면에 보여줄때 줄넘김을 위해 <br> 태그 추가
Loop
%>

이 코딩은, 불러온 문서가 텍스트나 html 이라는 가정하에 처리된 것이다.

반응형
Posted by 친절한 웬디양~ㅎㅎ
|

카운터소스

Develope/ASP 2010. 1. 13. 15:45
반응형

global.asa 소스입니다

<script language="vbscript" runat="server">
Sub Application_OnStart

    Set FileObject = Server.CreateObject("Scripting.FileSystemObject")
    VisitCountFileName =server.MapPath("abc")&"\visit.txt"
    Set Out = FileObject.OpenTextFile(VisitCountFileName,1,FALSE,FALSE)

    Application("count")=Out.ReadLine
    Application("VisitCountFileName")=VisitCountFileName
   
    Application("now_visit") = 0

End Sub

Sub Application_OnEnd

    Set FileObject = Server.CreateObject("Scripting.FileSystemObject")
    Set Out = FileObject.CreateTextFile(Application("VisitCountFileName"),TRUE)

    Application.Lock
    Out.WriteLine(Application("count"))
    Application.UnLock

End sub

Sub Session_OnStart

    Application.lock
    Application("count")= Application("count")+1
    Application("now_visit") = Application("now_visit") + 1  '현재접속인원 체크용
    Application.unlock

    Session.Timeout = 20

    If Application("count") MOD 10 = 0 Then
      Set FileObject = Server.CreateObject("Scripting.FileSystemObject")
      Set Out = FileObject.CreateTextFile(Application("VisitCountFileName"),TRUE)

      Application.lock
      Out.WriteLine(Application("count"))
      Out.Close
      Application.unlock

    End If
 

if Application("today") <> left(now,10) then '날짜가 다음날이 되었다면....today count....

  Application.lock

  Application("today") = left(now,10)

  Application("today_visit") = 1

  Application.unlock

else   '아직 오늘이라면...

  Application.lock

  Application("today_visit") = Application("today_visit") + 1

  Application.unlock

end if

End Sub


Sub Session_OnEnd

    Application.lock
    Application("now_visit") = Application("now_visit") - 1  '현재접속인원 체크용
    Application.unlock

End Sub

 

</script>

main.asp 소스

<html>
<body>
<center><font face="돋움" size="3">
<p>&nbsp;</p>

현재 : <%=application("now_visit")%>

오늘 : <%=application("today_visit")%>

전체 : <%=application("count")%>

 

</font></center>
</body>
</html>

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형

다음의 예를 실예로 보면서 설명하겠다

strQuery = "SELECT * FROM Orders WHERE OrderDate >= '" & startDate & "' AND OrderDate < '" & endDate & "'"

rs.Open strQuery, adoConn

일단 따옴표(')를 빼먹기 쉽다는 문제는 제쳐 두더라도, 이 쿼리는 SQL 서버 내에서 수행될 때 startDate와
endDate의 값이 변경될 때마다 매번 컴파일 과정을 거쳐야 한다.

불필요한 SQL 컴파일은 DB의 부하를 가중시키켜 성능 저하로 이어지게 된다.

이 문제를 피하려면 파라미터화된 쿼리(Parameterized Query)를 사용하는 것이 좋습니다.
보다시피 따옴표가 사라지고 ? 또는 @로 시작하는 파라미터가 추가되었습니다.

strQuery = "SELECT * FROM Orders WHERE OrderDate >= ? AND OrderDate < ?"

또는

strQuery = "SELECT * FROM Orders WHERE OrderDate >= @startDate AND OrderDate < @endDate"

매개변수를 가진 쿼리를 사용하는 경우에는 매개변수를 넣어주기 위해 반드시 Command 객체를 사용해야 한다.

(아래 예제 참조 )


Set adoCmd = CreateObject("ADODB.Command")
Set adoCmd.ActiveConnection = adoConn
adoCmd.CommandText = strQuery
adoCmd.CommandType = adCmdText '또는 1
adoCmd.Parameters.Append adoCmd.CreateParameter("@startDate", adDate, adParamInput, , startDate)
adoCmd.Parameters.Append adoCmd.CreateParameter("@endDate", adDate, adParamInput, , endDate)

rs.Open adoCmd 'Query 대신 Command 객체를 지정 


이렇게 매개변수를 가진 쿼리를 실행하면, SQL Profiler에서 SQL배치가 아닌 RPC가 수행되어 더욱 속도가 빨라진다.
또한 다음과 같이 매개변수화 되므로 startDate, endDate의 값이 변경되더라도 SQL 컴파일은 한번만 일어나게 된다.

exec sp_executesql N'SELECT * FROM Orders WHERE OrderDate >= @P1 AND OrderDate < @P2 ', N'@P1 datetime,@P2 datetime', '01 1 1995 12:00AM', '01 1 1996 12:00AM'

매개변수를 가진 쿼리는 코드 가독성을 높여주고, 성능 면에서는 좋긴 하지만 코딩량이 다소 늘어난다는 단점
이 있어서 귀차니즘(?) 때문에 안 쓰는 사람들이 많지만..최소한 자주 수행되는 쿼리의 경우 이렇게 작성하면 DB의
부하를 줄이고 성능을 향상시킬 수 있다.

========================= Command 객체의 속성 지정으로 최적화 =====================
우리는 날쿼리를 자주 사용하게 되거나 프로세스 로직이 들어가있는 경우 sp를 사용하게 됩니다.
헌데..날쿼리를 사용하고 Command객체를 사용할경우..
 
  Cmd.Prepared=True 속성이 있다..
-- 이속성은 명령을 실행하기 전에 미리 컴파일해 둘 것인지를 지정하는 속성이다.
   위와 같이 속서을 지정하게 되면..Command 개체는 명령을 실행하기 전에 명령을 컴파일 해서 저장하게된다.
   해서 .. 처음 실행시에는 시간이 조금은 걸리지만 이후 같은 명령을 재실할 경우에는컴파일된 버전을 사용하게
   되므로 속도의 향상 효과를 낼수있다.
   특히.. sp가 아닌 날쿼리로 작성되는 쿼리라면 그리고 특히 페이지 접속이 많은 경우라면
   사용하면 성능의 향상을 꾀할수 있다..

   Cmd.Execute 속성...
   --  Execute [RecordAffected],[Parameters],[Options]

이곳은 다들 알고 있는것이라 생각하므로 Options인자중
잘 쓰지 않는 Opitons중..adExecuteNoRecords를 말하지 않을수 없다.

물론 알고계실것이라 생각들지만..
insert,update,Delete를 할때는 굳이 RecordSet을 생성하지 않아도 된다
이때는 명시적으로 Options 인자중 위의 adExecuteNoRecords를 쓰지 않는경우
보이지 않는 레코드셋이 생성된다.
해서..반드시 adExecuteNoRecords를 쓴다면..레코드셋 객체 자체를 생성치 않으므로..
서버 성능을 꾀할수 있다.

반응형
Posted by 친절한 웬디양~ㅎㅎ
|

Asp 성능향상 팁

Develope/ASP 2009. 11. 18. 17:03
반응형

1. Option Explicit를 명시한다.

2. 배열사용 시 배열 재할당은 최대한 피한다.

3. 배열 사용이 빈번할 시 Dictionary 객체를 이용하여 가독성을 높인다.

4. Stored Procedure를 사용한다. (일반 ASP자체 쿼리보다 최고 30% 성능 향상.)

5. 뷰테이블 사용 시 뷰테이블 자체에서 정렬을 해야 한다. 이미 만들어진 뷰테이블을 이용하여 Asp 코드에서 정렬하면 속도가 크게 떨어진다.

6. Query를 사용할 때 꼭 필요한 컬럼만 명시하여 불러오거나 이용해야 한다.

7. Recordset 객체 보다는 Command 객체를 이용하는 것이 빠르다.

8. Recordset 객체 사용시 CursorLocation를 적절한 것을 사용해야 한다. (1, 서버, 3. 클라이언트) 속도의 차이가 클 수 있다. CursorType도 영향을 미친다. 반드시 테스트 필요.

9. 1000글자가 넘어가는 문장의 경우는 변수에 담아서 한번에 Response.Write 하는 것보다는 한줄한줄 직접 뿌려주는 것이 빠르다. <%= %>를 이용해 직접 뿌리는 것이 가장 빠르다.

10. 사용한 객체는 반드시 Close, Nothing 해준다.

11. 다중레코드를 이용할 시에는 Do until, Rs.MoveNext 구문보다는 GetRows() 함수를 이용하는 것이 빠르다.(Stored Procedure와 함께 사용시 최고 40% 성능 향상, 단독으로 사용시 최고 20% 성능 향상.)

12. 사용자 Function을 만들어 쓰는 것이 디버깅 등에 좋다.

13. ADODB 객체 사용보다 OBJECT 객체를 사용하여 컨넥션, 레코드셋을 연다.

==============================================================================

잘못알려진 내용들

1. Inlcude를 많이 시키면 속도가 느려진다고 일반적으로 알려져 있지만 실제로는 속도차이가 전혀 없다.

2. 긴문장이나 Html과 Asp 태그를 혼합해서 많이 쓰면 느려진다고 알려져 있으나 실제로는 차이가 없거나 혼합해서 쓰는 것이 오히려 빨랐다. 오히려 긴 Html 태그를 asp 변수에 담아 Response한 결과 1000글자가 넘어갈 수록 단순히 혼합해서 쓴 소스의 수행시간의 제곱에 비례하게 느려지는 것이 발견되었다.

3. 뷰테이블에 아무리 많은 컬럼들을 Join 해도 단일 컬럼을 사용하는 속도와 동일하다.

머 이미 다 알고 계실지 모르지만 책들보고 의문나는 것들을 직접 튜닝및 실행시간 테스트를 하며 정리한 것입니다. 많은 분들이 도움이 되었으면 좋겠네요^^ 테스트, 튜닝을 해보면서 느낀건데, 우리 주위에는 너무 잘못알려진 것들이 많습니다. 아무리 유명한 책이라도 맹신하지 말고 직접 테스트 해보는 습관을 기릅시다^^

반응형
Posted by 친절한 웬디양~ㅎㅎ
|

[ASP] Cdonts, cdosys

Develope/ASP 2009. 10. 8. 17:09
반응형

이 문서에서는 CDONTS 개체 모델을 기반으로 하는 기존 코드를 CDOSYS로 마이그레이션하는 방법을 단계별로 설명합니다.

Cdonts.dll 및 Cdosys.dll 개체 라이브러리를 사용하면 인터넷 표준 형식과 프로토콜을 사용하여 전자 메일을 만들고 처리할 수 있습니다. NTS용 Collaboration Data Objects(CDONTS)는 원래 Microsoft Commercial Internet Server(MCIS)에서 사용하도록 구현된 것으로 Windows NT Option Pack에 포함되었습니다. CDONTS는 또한 Windows NT와 호환될 수 있도록 Windows 2000에도 포함되었습니다. Microsoft Windows XP와 Windows의 후속 릴리스에는 CDONTS가 포함되어 있지 않습니다. Windows 2000용 Microsoft Collaboration Data Objects(CDOSYS)는 Windows 2000 운영 체제 구성 요소로서 구현되고 포함되어 있습니다. 따라서 CDONTS를 기반으로 하는 기존 코드를 CDOSYS로 마이그레이션해야 합니다.

기능 비교

다음 표는 Cdonts.dll 라이브러리와 Cdosys.dll 라이브러리의 운영 체제(OS) 지원과 기능 지원을 비교한 것입니다.
기능 CDONTS CDOSYS 참고
Windows NT 지원 아니요 두 가지 모두 OS에 포함되지 않았음
Windows 2000 지원 두 가지 모두 OS에 포함되었음
Windows XP 지원 아니요 CDOSYS만 OS에 포함되었음
Exchange 서버 지원
메일 보내기
뉴스 그룹에 게시 아니요
SMTP(Simple Mail Transfer Protocol) NNTP(Network News Transfer Protocol) 포트를 사용하여 보내기(게시) 아니요
MIME 및 Uuencode 메시지 형식
MIME 본문 부분 구조, 인코딩, 문자 집합 등에 대한 명시적인 제어 아니요
HTML 및 MHTML 지원
로컬 드롭 디렉터리 나열 / 읽기 아니요
POP3를 통해 받은 편지함 표시 / 읽기 아니요
전송 이벤트 싱크 지원 아니요
회신 및 전달 기능 아니요

예제

다음 예제는 CDONTS와 CDOSYS를 사용하여 같은 작업을 수행하는 방법을 보여줍니다. 아래의 예제는 각각 두 라이브러리가 갖고 있는 기능을 설명한 다음 각 라이브러리에서 해당 기능을 구현하기 위한 예제 코드를 제공합니다. 이들 코드 예제는 Windows 2000 서비스 팩 2(SP2)와 다음 라이브러리 버전을 사용하여 확인되었습니다.
CDONTS 6.0.3939.0
CDOSYS 6.0.3943.3

간단한 보내기

이 예제는 두 라이브러리의 가장 일반적인 사용 예제입니다. 이 경우에는 두 라이브러리가 모두 SMTP 서버의 픽업 디렉터리에 메시지를 씁니다. 디렉터리 경로는 로컬 메타베이스에서 읽어 옵니다.
CDONTS 예제
 set m =
CreateObject("CDONTS.NewMail") m.Send "user1@company.com", _
"user2@company.com", _ "test 1", _ "hello there" 
CDOSYS 예제
 Set m =
CreateObject("CDO.Message") m.From = "user1@company.com" m.To =
"user2@company.com" m.Subject = "test 1" m.TextBody = "hello there"
m.send

HTML 본문 보내기

다음 예제는 HTML 본문 텍스트를 메시지 안에 포함시키는 예제입니다. 그 점을 제외하고 이 예제는 "간단한 보내기" 예제와 유사합니다. 두 가지 예제 집합 모두에서 MIME multipart/alternative 메시지 형식이 사용됩니다. 또한, HTML에서 자동으로 일반 텍스트 본문도 만들어집니다. 일반 텍스트 본문은 텍스트/일반 본문 부분으로서 포함됩니다.
CDONTS 예제
 sHTML = "<html><body><font
color=""#FF0000"">" & _ "hello,
Red</font></body></html>" Set m =
CreateObject("CDONTS.NewMail") m.MailFormat = 0 ' CdoMailFormatMime
m.BodyFormat = 0 ' CdoBodyFormatHTML m.Send "user1@company.com", _
"user2@company.com", _ "test 1", _ sHTML 
CDOSYS 예제
 sHTML = "<html><body><font
color=""#FF0000"">" & _ "hello,
Red</font></body></html>" Set m = CreateObject("CDO.Message")
m.From = "user1@company.com" m.To = "user2@company.com" m.Subject = "test 1"
m.HtmlBody = sHTML m.send

MIME 형식의 첨부 파일과 함께 보내기

CDONTS 예제
Set m = CreateObject("CDONTS.NewMail") m.MailFormat = 0 ' CdoMailFormatMime
m.AttachFile "d:\ptsp\test\test.doc" m.Send "user1@company.com", _
"user2@company.com", _ "test.doc", _ "Here is the document you
requested"
CDOSYS 예제
 Set m
= CreateObject("CDO.Message") m.From = "user1@company.com" m.To =
"user2@company.com" m.Subject = "test.doc" m.TextBody = "Here is the document
you requested." m.AddAttachment "file://d:\ptsp\test\test.doc"
m.send

Uuencode 형식의 첨부 파일과 함께 보내기

두 라이브러리 모두 Uuencode 형식의 첨부 파일이 있는 메시지를 보내려면 메시지의 속성을 변경하여 형식을 변경하십시오.
CDONTS 예제
 Set m =
CreateObject("CDONTS.NewMail") m.MailFormat = 1 ' CdoMailFormatText
m.AttachFile "d:\ptsp\test\test.doc" m.Send "user1@company.com", _
"user2@company.com", _ "test.doc", _ "Here is the document you requested"
CDOSYS 예제
 Set m =
CreateObject("CDO.Message") m.MimeFormatted = false m.From =
"user1@company.com" m.To = "user2@company.com" m.Subject = "test.doc"
m.TextBody = "Here is the document you requested." m.AddAttachment
"file://d:\ptsp\test\test.doc" m.send

유니코드 메시지 텍스트 보내기

이 예제에는 받는 사람의 표시 이름과 메시지 텍스트 안에 유니코드 문자(유로 기호, €, 유니코드 코드 포인트 0x20ac)가 포함되어 있습니다. 두 가지 예제 모두에서 "€"는 utf-7 CharSet 속성으로 인코딩됩니다. CDONTS는 CP_UTF7=65000 상수를 사용해야 합니다. CDOSYS의 경우 CharSet 이름은 unicode-1-1-utf-7입니다.
CDONTS 예제
 Set s = CreateObject("CDONTS.Session") S.LogonSMTP "User 1",
"user1@company.com" s.SetLocaleIDs 65000 ' cpUTF7 Set m = s.Outbox.Messages.Add
m.MessageFormat = 0 ' CdoMime set r = m.Recipients.Add 'r.address =
"user2@company.com" r.name = "Joe €" r.address = "<joe.euro@company.com>"
m.Subject = "Unicode content" m.Text = "That will be €5, please."
m.Send
CDOSYS 예제
set m =
CreateObject("CDO.Message") m.From = "User1 <user1@company.com>" m.To =
"Joe € <joe.euro@company.com>" m.Subject = "Unicode content" set b =
m.bodypart b.charset = "unicode-1-1-utf-7" m.textbody = "That will be €5,
please." m.send

[출처] Cdonts, cdosys|작성자 해결사

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형
rs.open sql,db,adOpenForwardOnly,adLockReadOnly,adCmdText

2 (adOpenDynamic) - 다이나믹 커서를 사용합니다. 

0 (adOpenForwardOnly) - 앞으로 전용 커서를 사용합니다.

1 (adOpenKeyset) - 키셋 커서를 사용합니다.

3 (adOpenStatic) - 정적 커서를 사용합니다.

 

커서는 서버나 클라이언트에 위치할 수 있는데요,

기본값은 앞으로 전용 커서입니다. 말 그대로 레코드셋 내에서 뒤로는 갈 수 없다는 말입니다. 리소스를 적게 사용하고 속도가 가장 빠릅니다.

1에 해당하는 키셋 커서는 뒤로도 갈 수 있습니다. 응용 프로그램에서 자주 쓰이죠.

일반 웹프로그램에서는 거의 사용되지 않습니다. (느리기 때문에)

 

3은 adLockOptimistic입니다. 잠금 형식입니다. 다음과 같은 값들이 있습니다.

 

4 (adLockBatchOptimistic) - update 메서드를 이용한 일괄 갱신 형식입니다.

3 (adLockOptimistic) - update 메서드를 이용한 갱신 형식입니다.

2 (adLockPessimistic) - 레코드 하나하나를 수정할 때 잠그고 수정 후 풀어주는 형식입니다.

1 (adLockReadOnly) - 레코드 모두를 잠금니다. 다른 사용자는 수정할 수 없습니다.

 

잠금 형식을 잘 사용해야 빠른 프로그램을 만들 수 있습니다.

Optimistic은 보통 수정하는 사람이 한 명 혹은 소수일 경우 (낙관적일 경우)

사용하면 좋습니다. 업데이트에 실패한 레코드별로 표시를 해주죠.

Pressimistic은 그보다 비관적일 경우 사용합니다. 아예 수정하지 못하도록 적절히

잠궈줍니다.

 

반응형
Posted by 친절한 웬디양~ㅎㅎ
|
반응형


<%@ LANGUAGE="VBSCRIPT-x"%>

<%

strIP = Request.ServerVariables("REMOTE_ADDR")

strMac = GetMACAddress(strIP)

strHost = Request.ServerVariables("REMOTE_HOST")

function GetMACAddress(strIP)

Set net = Server.CreateObject("wscript-x.network")

Set sh = Server.CreateObject("wscript-x.shell")

sh.run "%comspec% /c nbtstat -A " & strIP & " > c:\" & strIP & ".txt",0,true

Set sh = nothing

Set fso = createobject("script-xing.filesystemobject")

Set ts = fso.opentextfile("c:\" & strIP & ".txt")

macaddress = null

Do While Not ts.AtEndOfStream

data = ucase(trim(ts.readline))

if instr(data,"MAC ADDRESS") Then

macaddress = trim(split(data,"=")(1))

Exit Do

End if

loop

ts.close

Set ts = nothing

fso.deletefile "c:\" & strIP & ".txt"

Set fso = nothing

GetMACAddress = macaddress

End function

%>

 

 

 

 

<body>

<%Response.Write("Your IP is : " & strIP & "" & vbcrlf)%>

<%Response.Write("Your MAC is : " & strMac & vbcrlf)%>

</body>

반응형
Posted by 친절한 웬디양~ㅎㅎ
|