Maystyle :
Admin : New post
Guestbook
Local
media
Catergories
Recent Articles
Recent Comments
Recent Trackbacks
Calendar
Tag
Archive
Link
Search
 
해당되는 게시물 4건
  DotNet Remoting 에서 아주 큰 데이터셋을 이용할때 발생하는 OutOfMemoryExceptions 
작성일시 : 2010.10.19 16:20 | 분류 : Technical Note (2008)/Development

최근에 흥미로운 일을 좀 진행 했습니다.
http://blogs.msdn.com/b/tess/archive/2008/09/02/outofmemoryexceptions-while-remoting-very-large-datasets.aspx

위의 문서에서 보듯이 .net Remoting을 통해 100M 정도의 데이터 셋을 Serialization을 하는데는 1G의 공간이 필요하다고 합니다. 물론 XML 타입으로 Serialization을 했기 때문이죠.

원래 XML은 Stateful 과 StateLess 타입이 있다고 합니다. 변경과 관련된 관리 정보를 저장하기 위해서죠. ( Anyway 기본적으로 XML 타입으로 Serialization을 하게 되면 Stuteful 이 됩니다. 그렇게 되면 데이터의 크기가 더 커지겠죠. 그리고 그와 더불어 이 XML 타입을 사용하는 경우 내부적으로 많은 Short lived 객체들을 사용하게 된다 던지 하는 등의 성능에 좋지 못한 영향을 끼칠 수 있는 문제들을 많이 발생 시킨다고 합니다. 이는 XML을 사용해서 문제가 되는 것이 아니라 XML 타입을 사용하지 않아도 되는 곳에 XML 타입을 사용했기 때문에 문제가 되는 것 입니다.
출처 : http://msdn.microsoft.com/en-us/magazine/cc163911.aspx

결론적으로 .net remoting을 통해 단순히 DB 조회 데이터를 가져온다면 Binary Type을 이용하는 것이 훨씬 효과적이라는 것입니다.

image

Binary 타입으로 Serialization을 하기 위해서는 Dataset을 리턴 하기 전에 한 줄만 추가해 주면 된다고 하네요.
ds.RemotingFormat = SerializationFormat.Binary;

그리고 한 가지 더 OOM은 물론 해당 프로세스의 메모리 사용량이 많아 졌을 때도 발생하지만 필요한 메모리를 할당하지 못했을 때 즉 Serialization을 하기 위해서는 1개의 큰 메모리 공간이 필요한데, 이미 다른 이유로 인해 메모리 단편화가 많이 발생하거나 32bit의 한계인 2G를 초과하는 메모리 할당이 필요 했다면 역시 OOM이 발생 합니다.

후자의 예만 잠시 들자면 VM 사이즈가 1.4G인 프로세스에서 100M의 dataset을 Serialization 하기 위해서는 약 1G의 메모리 공간이 필요합니다. 하지만 이렇게 1G의 메모리 공간을 추가로 할당하게 되면 VM 사이즈가 2G를 넘어서기 때문에 할당에 실패할 수 밖에 없습니다. 이 경우 OOM이 발생하게 되는 것이죠,

Name   Password   Home   Secret   Submit
  .net 환경에서 VJSharpCodeProvider 호출과 함께 Crash 가 발생한다. 
작성일시 : 2010.08.31 10:59 | 분류 : Technical Note (2008)/Development

JAVA나 J#을 이용해서 개발하지 않은 경우에도 VJSharpCodeProvider 가 호출이 되며 문제가 발생 할 수 있습니다.
아래는 이와 비슷한 일을 겪은 엔지니어의 사례 입니다.

원문 : http://blogs.msdn.com/b/pfedev/archive/2007/11/13/assemblyresolve-event-and-vjsharpcodeprovider.aspx

It works at first and then later breaks...Reviewing
"처음에는 잘 동작하지만 나중에는 문제가 발생합니다."

We know that the VJSharpCodeProvider is not on their system but the failure to load this file is normal so why does it start becoming a problem?
"우리는 그들의 시스템에 VJSharpCodeProvider 가 없는 것을 알고 있습니다. 그러나 이런 파일들을 로드하는 것은 정상입니다. 왜 이런 문제가 발생할까요?"

In conclusion, when the application is first launched their code has not executed yet therefore the ResolveEventHandler has not been hooked up to the AssemblyResolve event.  However later in the run of the application when a recompile occurs and we reprobe for the VJSharpCodeProvider the exception is thrown and the ASP.NET Compile code is not expecting and exception do this leads to other errors.
”결론적으로 어플리케이션이 최초로 실행 됐을 때에는 해당 코드는 실행되지도 않고 ResoloveEventHandler 역시 AssemblyResolve 이벤트를 처리 하지 않고 있었습니다. 하지만 이후에 어플리케이션이 실행 하면서 재 컴파일이 일어나게 되면 다시 코드에 대한 검증이 진행 되면서 VJSharpCodeProvider 예외가 발생 하게 되고, 또한 ASP.net 컴파일 코드가 실행 되지도 않고 예외가 발생하면서 다른 여러 예외들을 발생 시키게 됩니다.”

Once we fixed up the handler to return NULL the application worked.  It sailed through testing and I got to go to bed!!  I hope that this helps someone else out.
"우리가 NULL 을 리턴하는 핸들러를 고치자 마자 테스트는 순조롭게 끝났고, 나는 드디어 잘 수 있게 되었습니다."

Name   Password   Home   Secret   Submit
  사용자 계정 옮기기 
작성일시 : 2007.12.14 17:18 | 분류 : Technical Note (2008)/Development | 태그 : Active Directory User move

사용자의 OU를 변경하는 스크립트 입니다...^^

Set objOU = GetObject("LDAP://ou=sales,dc=na,dc=fabrikam,dc=com")

 

objOU.MoveHere _

    "LDAP://cn=BarrAdam,OU=hr,dc=na,dc=fabrikam,dc=com", vbNullString

Name   Password   Home   Secret   Submit
  Hands On Lab (for Developer) 
작성일시 : 2007.07.26 12:39 | 분류 : Technical Note (2008)/Development | 태그 : .NET, developer, hands on lab, MSDN

MSDN 공부할 만한 Hands On Lab을 250개가 각 대표 기술 별로 그룹 지어져 있습니다.

출처 : http://blogs.msdn.com/somasegar/archive/2007/07/17/hands-on-labs-a-great-resource-for-developer-learning.aspx

공부합시다...^___^v
Name   Password   Home   Secret   Submit