출처 : http://soyokaze.egloos.com/900499/

 

Windows Application의 Minimize의 비밀.
Windows 상에서 돌아가는 응용 프로그램의 경우 한 가지 신기한 점이 있는데, UI를 가진 아무 프로그램이나 띄워 놓고 작업 관리자에서 메모리 사용량을 체크한 후, 해당 프로그램을 태스크 바로 내리면 (최소화 시키면) 작업 관리자의 해당 프로세스 메모리 사용량이 줄어드는 것을 볼 수 있다. 이런 방식을 사용해서 백그라운드 프로그램(서비스가 아닌)의 작업 관리자에서 보여지는 메모리 사용량을 적어 보이게 하는 방식을 사용하기도 하는데.. ^^



하여튼 왜 이런 현상이 발생하는지는 모르고 있다가 Eclipse와 Firefox의 Swapping 문제라는 글에서 원인을 발견했다. 이 글의 중반 쯤의 링크에 보면 PRB: An Application's Working Set Is Trimmed When Its Top-Level Window Is Minimized 라 는 MS의 KB 문서가 있다. 이를 보면, Windows는 ShowWindow API에 SW_MINIMIZE 파라미터를 통해 프로그램을 최소화 하는 경우 프로그램의 워킹 셋 (물리적 메모리 - RAM 에 현재 기록되어 있는 메모리 페이지) 을 줄여버린다는 것이다. 플로우 상으로는 ShowWindow API를 SW_MINIMIZE 파라미터를 통해 콜하면(또는 WM_SYSCOMMAND에 SC_MINIMIZE 파라미터로 메시지를 전달하는 경우) 기본 윈도우 프로시저 - DefWindowProc 가 불려지고 여기에서 SetProcessWorkingSetSize API에 파라미터를 -1, -1로 넘겨서 워킹 셋을 완전히 날려버린다. 아, 시도한다는 말이 맞을 듯..



MS KB 에서는 이 점에 대한 해결책도 제시하고 있는데, ShowWindow API 사용지 SW_MINIMIZE 대신 SW_SHOWMINIMIZED를 사용하면 된다고 한다. WM_SYSCOMMAND를 통해 최소화 시에는 WM_SYSCOMMAND 메시지 처리 시 해당 메시지의 WPARAM이 SC_MINIMIZE 인 경우 ShowWindow API를 콜하고 (물론 SW_SHOWMINIMIZED 파라미터로) 리턴해 버리면 된다.



참, 위의 이야기는 모두 Windows NT 계열 이상에서의 이야기이다. ^^
안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,

Private Function GetFileLastModifiedDate(szFileName) As String
    Dim fs, f
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(szFileName)
    GetFileLastModifiedDate = f.DateLastModified
    Set f = Nothing
    Set fs = Nothing
End Function

 


Private Function GetFileLastAccessDate(szFileName) As String
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile(szFileName)
GetFileLastAccessDate = f.DateLastAccessed
Set f = Nothing
Set fs = Nothing
End Function



Private Function GetFileSize(szFileName) As Long
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile(szFileName)
GetFileSize = f.Size
Set f = Nothing
Set fs = Nothing
End Function



Private Function GetFileType(szFileName) As String
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile(szFileName)
GetFileType = f.Type
Set f = Nothing
Set fs = Nothing
End Function



Private Function GetFileCreatedDate(szFileName) As String
Dim fs, f
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile(szFileName)
GetFileCreatedDate = f.DateCreated
Set f = Nothing
Set fs = Nothing
End Function

안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,

VB에서 ADODB.Connection 사용할 때

 

'-2147217871 (80040e31)' 런타임 오류

"시간 제한이 만료되었습니다."

 

라고 에러 메시지가 처음부터 뜨는게 아니고 어느정도 쿼리 진행하다보면 뜬다.

 

VB에서 DB connect time은 기본적으로 30초란다.

30초가 넘어가면 "시간 제한이 만료되었습니다." 메세지가 나온다고 한다.

 

해결 방법은 아래와 같다.

 

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

 

Connection 객체를 open 하기 전에

 

Dim conn As New ADODB.Connection

 

conn.CommandTimeout = 0 '단위는 초

conn.ConnectionTimeout = 0 '단위는 초

 

ConnectionTimeout 은 연결하는 시간설정

CommandTimeout 은 쿼리등의 커맨드 시간설정

 

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

안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,

출처 : http://support.microsoft.com/kb/189323

 

 

      Option Explicit

      Private Const OFFSET_4 = 4294967296#
      Private Const MAXINT_4 = 2147483647
      Private Const OFFSET_2 = 65536
      Private Const MAXINT_2 = 32767

      Function UnsignedToLong(Value As Double) As Long
        If Value < 0 Or Value >= OFFSET_4 Then Error 6 ' Overflow
        If Value <= MAXINT_4 Then
          UnsignedToLong = Value
        Else
          UnsignedToLong = Value - OFFSET_4
        End If
      End Function

      Function LongToUnsigned(Value As Long) As Double
        If Value < 0 Then
          LongToUnsigned = Value + OFFSET_4
        Else
          LongToUnsigned = Value
        End If
      End Function

      Function UnsignedToInteger(Value As Long) As Integer
        If Value < 0 Or Value >= OFFSET_2 Then Error 6 ' Overflow
        If Value <= MAXINT_2 Then
          UnsignedToInteger = Value
        Else
          UnsignedToInteger = Value - OFFSET_2
        End If
      End Function

      Function IntegerToUnsigned(Value As Integer) As Long
        If Value < 0 Then
          IntegerToUnsigned = Value + OFFSET_2
        Else
          IntegerToUnsigned = Value
        End If
      End Function

안정적인 DNS서비스 DNSEver DNS server, DNS service
Posted by 키르히아이스
,