2012년 9월 27일 목요일

[VS2012] System Requirements



Visual Studio 2012 System Requirements


Supported Operating Systems
  • Windows 7 (x86 and x64)
  • Windows 8 (x86, and x64)
  • Windows Server 2008  R2 (x64)
  • Windows Server 2012 (x64)

Hardware Requirements
  • 1.6 GHz or faster processor
  • 1 GB of RAM (1.5 GB if running on a virtual machine)
  • 10 GB (NTFS) of available hard disk space
  • 5400 RPM hard drive
  • DirectX 9-capable video card running at 1024 x 768 or higher display resolution

Supported architectures
  • 32-bit (x86)
  • 64-bit (x64)


CF)

@

2012년 9월 20일 목요일

ListView VirtualMode


Virtual ListView?! ListView에 많은 데이터를 출력하게 되면 스크롤 시 데이터 출력이 느려진다. 이것을 보완하기 위한게 VirtualListView 인데 이건 MFC때도 있던 개념이다.


Settings

VirtualMode 속성값을 true로 설정하여 ListView가 가상 모드로 사용할 것임을 알린다.
VirtualListSize 값을 가상 모드에 사용할 데이터 개수로 설정한다. VirtualListSize 값이 0 보다 크면 RetrieveVirtualItem 이벤트 핸들러를 정의해야 한다. 이 이벤트 핸들러에서 ListViewItem 객체를 생성하여 ListView에 추가한다.

- VirtualMode = true
- VirtualListSize에 가상 모드 목록에 사용되는 ListViewItem 개수 설정
- RetrieveVirtualItem 이벤트 핸들러 정의


Remarks

- Items, CheckedItems, SelectedItems 프로퍼티를 사용하면 안된다. (InvalidOperationException 예외 발생)
  CheckedItems -> CheckedIndices
  SelectedItems -> SelectedIndices
- ListView에 요청이 있을때 마다 발생하는 RetrieveVirtualItem 이벤트에 대한 핸들러 정의.
- VirtualListSize 지정 후 RetrieveVirtualItem 이벤트 핸들러를 정의하지 않았을 경우





참조

ListView.VirtualMode Property - MSDN
Virtual Mode ListView - Code Project
Slow ListView? – Virtual ListView! - Alois Kraus

@

2012년 9월 19일 수요일

About ListViewItem Text Property


환경 : .NET Framework 3.5


 ListViewItem 의 Text 프로퍼티값을 입력하여 생성한 ListViewItem 객체를 ListView에 추가하였다. 그런데 ListView 에 보이는 아이템의 Text 가 입력한 값과 다르게 짤려서 출력이 되었다.

MSDN에 보니 ListViewItem 의 Text 프로퍼티값은 ListView에서 출력될 때 사용되는 값이 저장된다고 한다. 단 259자를 넘을 수 없고 넘는다면 예측할 수 없는 오류가 발생할 수 도 있다고 한다.
ListViewItem Text Property - MSDN

왜 그럴까?
확실한 정보인지는 모르겠지만 찾아본 정보에 의하면 MS 측에서 말하길,
일반적인 컨트롤과는 다르게 ListView 를 디자인 할 때는 파일과 같은 객체의 정보를 출력하기 위한 용도로 만들었다고 한다. 윈도우즈에서 파일 이름의 최대 길이는 MAX_PATH 값이다. MAX_PATH 의 값은 260이다.

OwnerDraw 프로퍼티값과 ListView의 DrawItem 이벤트를 이용하면 259자를 넘는 Text도 출력할 수 있다고 하는데 이건 손이 많이간다.
.NET ListView, max number of characters, or maximum column width? Possible to override/expand?- stackoverflow

MS 고객지원 페이지를 보니, ListViewItem 의 Text 프로퍼티값이 출력될 땐 259자만 출력 되지만 값은 원래값(259자가 넘는)을 가지고 있으므로 ListView 의 SelectedIndexChanged 이벤트 시 Text 값을 TextBox 와 같은 다른 컨트롤에 출력 하라고 한다.
ListView control can only display 259 characters per column - support.microsoft.com

아마도 WPF에서는 이런 고민이 없을텐데.. 더 좋은 방법이 없을까 싶다.

@


2012년 9월 16일 일요일

How to open a WOW64 registry key


 응용프로그램의 플랫폼x86 으로 설정하였다. 이 응용프로그램은 x86 환경에선 당연히 x86 응용프로그램으로 동작하고, x64 환경에선 x86 으로 WOW로 동작한다. 응용프로그램에서 다음과 같이 레지스트리 키를 생성한다면?!

string portRegPath = "Software\\Yuk\\MyApp\\RegDemo";
key = Registry.LocalMachine.OpenSubKey(portRegPath, true);
if (key == null)
{
      key = Registry.LocalMachine.CreateSubKey(portRegPath);
}

x86 플랫폼의 응용프로그램이 x86 응용프로그램으로 실행 될 경우 LocalMachiine 의 Software\\Yuk\\MyApp\\RegDemo 에 기록. x64 WOW 로 실행 될 경우 LocalMachine 의 Software\\Wow6432Node\\Yuk\\MyApp\\RegDemo 에 기록.

즉, WOW로 동작하는 응용프로그램을 위한 레지스트리가 따로 존재한다.


또한 CreateSubKey 에서 x86 레지스트리 경로를 사용하여 기록해도, x64에선 자동으로 Wow6432Node 레지스트리 경로에 기록된다. (레지스트리를 읽을 때도 동일하게 적용됨.)
*) x86 플랫폼으로 빌드된 응용프로그램일 경우만 그러하고, Any CPU, Mixed Ploatforms 로 빌드된 응용프로그램은 레지스트리 경로를 각각 직접 지정해줘야 한다.

직접적으로 WOW64 레지스트리 경로를 얻어야 할 경우, 다음 코드를 참조

public RegistryKey GetSoftwareRoot()
{
    var path = 8 == IntPtr.Size ? @"Software\Wow6432Node" : @"Software";
    return Registry.CurrentUser.OpenSubKey(path);
}

IntPtr 은 포인터나 핸들을 나타내는 데 사용되는 플랫폼별 형식으로 IntPtr.Size 값으로 x86 에선 4, x64 에선 8 값을 갖는다.



System.Environment.Is64BitOperationSystem
.NET Framework 4.0 이상 환경에서 개발한다면 Environment.Is64BitOperationSystem 프로퍼티를 이용하면 더 직관적으로 코딩할 수 있다. Environment.Is64BitOperaionSystem 프로퍼티는 현재 운영체제가 64비트 운영체제인지 확인해 준다.
RegistryKey registryKey; if (Environment.Is64BitOperatingSystem == true) { 
    registryKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry64); } else { 
    registryKey = RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, RegistryView.Registry32); } 


참조
How to open a WOW64 registry key from a 64-bit .NET application - stackoverflow
Checking if the Current Process is 64-bit - blackwasp
Checking if the Operating System is 64-bit - blackwasp

@

2012년 9월 12일 수요일

[MS SQL Server] CONVERT, 날짜형식 변환


한국, 영문 언어만 고려한다면 상관 없겠지만 스페인 언어를 고려하다 보니 날짜 출력 포멧이 달라 신경쓸께 조금 있다.
날짜 타입의 변환을 위해서 쿼리에서 CONVERT 함수의 사용 기록을 남겨본다.


CONVERT 함수
Syntax for CONVERT:
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )


expression

유효한 입니다.


data_type

대상 데이터 형식입니다. xml, bigintsql_variant가 있습니다. 별칭 데이터
형식은 사용할 수 없습니다. 사용 가능한 데이터 형식에 대한 자세한 내용은 데이터
형식(Transact-SQL)
을 참조하십시오.


length

대상 데이터 형식의 길이를 지정하는 선택적 정수입니다. 기본값은 30입니다. 


CONVERT 함수는 식(expression) 을 다른 데이터 형식(data_type) 으로 변환하는 함수이다.
style 옵션에 따라 여려 형식으로 변환 가능하다.

예로 들자면
DATETIME 타입을 VCHAR 타입으로 변환 하며, 여러 스타일로 출력한 모습






































































 SELECT CONVERT(VARCHAR, GETDATE(),   1) 09/13/12
 SELECT CONVERT(VARCHAR, GETDATE(),   2) 12.09.13
 SELECT CONVERT(VARCHAR, GETDATE(),   3) 13/09/12
 SELECT CONVERT(VARCHAR, GETDATE(),   4) 13.09.12
 SELECT CONVERT(VARCHAR, GETDATE(),   5) 13-09-12
 SELECT CONVERT(VARCHAR, GETDATE(),   8) 11:00:04
 SELECT CONVERT(VARCHAR, GETDATE(),   9) 09 13 2012 11:02:32:090AM
 SELECT CONVERT(VARCHAR, GETDATE(),   13) 13 09 2012 11:02:44:327
 SELECT CONVERT(VARCHAR, GETDATE(),   14) 11:02:53:733
 SELECT CONVERT(VARCHAR, GETDATE(),   20) 11:03:01:253
 SELECT CONVERT(VARCHAR, GETDATE(),   21) 2012-09-13 11:03:08.507
 SELECT CONVERT(VARCHAR, GETDATE(),   22) 09/13/12 11:03:14 AM
 SELECT CONVERT(VARCHAR, GETDATE(),   23) 2012-09-13
 SELECT CONVERT(VARCHAR, GETDATE(),   25) 2012-09-13 11:03:27.793
 SELECT CONVERT(VARCHAR, GETDATE(),   101) 09/13/2012
 SELECT CONVERT(VARCHAR, GETDATE(),   102) 2012.09.13
 SELECT CONVERT(VARCHAR, GETDATE(),   103) 13/09/2012
 SELECT CONVERT(VARCHAR, GETDATE(),   104) 13.09.2012
 SELECT CONVERT(VARCHAR, GETDATE(),   105) 13-09-2012
 SELECT CONVERT(VARCHAR, GETDATE(),   111) 2012/09/13
 SELECT CONVERT(VARCHAR, GETDATE(),   112) 20120913
 SELECT CONVERT(VARCHAR, GETDATE(),   120) 2012-09-13 11:07:24
 SELECT CONVERT(VARCHAR, GETDATE(),   121) 2012-09-13 11:07:33.880




cf) http://jhbench.tistory.com/entry/MSSQL-CONVERT%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EB%82%A0%EC%A7%9C-%ED%98%95%EC%8B%9D-%EB%B3%80%EA%B2%BD
cf) http://blog.naver.com/PostView.nhn?blogId=nawoo&logNo=80128144043
cf) http://www.sqlusa.com/bestpractices/datetimeconversion/


@