2013-02-13 3 views
2

잠재적으로 많은 모양을 만들고 모양 데이터를 다양한 값으로 설정하는 코드가 있습니다. 일부 셰이프는 5 개의 셰이프 데이터 행과 약 20 개 (또는 다른 여러 값)를 가질 수 있습니다.모양과 모양 데이터가 많은 .net - 다이어그램 작성을 통한 Visio 자동화 성능 향상

이것은 VB.Net로 작성되었으며 성능을 향상시키고 싶습니다. 여기에 가이드 라인을 :

http://blogs.msdn.com/b/mailant/archive/2004/09/22/233082.aspx

내가 .DropMany 및 .SetFormulas 호출에서 찾고있다.

하나의 문제는 셰이프 데이터 행을 많이 추가하려는 것입니다. 하나의 히트에 여러 행을 수행하는 .AddShapes 호출이 있지만 모양 데이터 섹션에 해당하는 것이 없습니다. --AddNamedRow (I AddRows에 대한 호출을 시도했지만 모양 데이터 섹션과 함께 사용하면 오류가 발생합니다.

현재 알고리즘 : 성능 향상을위한

Work out which masters to use for which shapes (not all the same) 
pg.DropMany(with array of masters and appriate X/Y coords) 
for each shape dropped: 
    for each shape data row (e.g. 5 - 10 times per shape): 
     shp.AddNamedRow() 
pg.SetFormulas(for all shapes on page and all properties) 

다른 방법은?

+0

모양을 삭제하기 전에 마스터에 추가하는 대신 방금 삭제 한 인스턴스에 명명 된 행을 추가하는 이유가 있습니까? – JohnGoldsmith

+0

문제는 같은 마스터 **를 가진 셰이프에 여러 가지 사용자 지정 속성 집합이 포함될 수 있다는 것입니다. 나는 속성의 최소 집합을 찾아내는 것에 주위에 찌르 게 될 것이다. 그리고 아마 떨어 뜨리기 전에 마스터에 그것들을 설정한다. –

+0

괜찮 았어, 네가 모든 행이있는 지점에 도달 할 수 있다면, 적절한 행/s의 가시성을 토글 할 수있을 것 같아. 인스턴스 모양에 행을 추가하는 또 다른 단점은 전체 섹션을 (마스터에서 상속하지 않고) 로컬로 만들 수 있다는 것입니다. – JohnGoldsmith

답변

1

시도해 볼 수있는 한 가지 방법은 Visio 응용 프로그램 개체에 ScreenUpdating 속성을 사용하는 것입니다. False로 설정하면 Visio는 속성이 다시 True로 설정 될 때까지 창을 업데이트하지 않습니다. 이전에는 Visio 자동화를 사용하지 않았지만 Word와 함께 사용했기 때문에 많은 도움이되었습니다. 트릭은 업데이트의 속도와 빈도간에 좋은 균형을 찾는 것입니다. 너무 오랫동안 업데이트를 해제하면 사용자가 Visio가 다운 된 것으로 생각할 수 있습니다.

+0

고마워 - 이미 해보기 - 보이지 않는 Visio 앱을 만든 다음 끝에 보이게하십시오. –

0

당신은 또한 당신의 셰이프 데이터가 연결되어 있습니다 내용에 따라 DeferRecalc, LiveDynamics, AutoLayoutUndoEnabled (Application 개체의 모든 속성)을보고 할 수 있습니다.

+0

감사합니다. 이미 DeferRecalc를 사용하고 있습니다. 확인하고 다른 것들이 효과가 있는지 확인합니다. –