Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Дмитрий Загорулькин от 26-12-2019, 17:35:41

Название: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Дмитрий Загорулькин от 26-12-2019, 17:35:41
Здравствуйте!
Словил новую проблему с обработкой объектов. Столкнулся с тем, что в какой-то рандомный момент обработка прерывается исключением AccesViolationException. AutoCAD "умирает" с фатальной ошибкой и даже в режиме отладки никакой подсказки о месте возникновения проблемы не удаётся получить. Опытным путём, методом исключения, установил, что проблема появляется в следующей операции. Взрываю объекты вертикального приложения (Civil 3D) и обрабатываю их в коде. Обработка:
Уже несколько раз переписал проблемный кусок, как мог сократил время, которое объекты держатся открытыми. Оптимизировал как мог, исключил ненужные открытия - всё равно проблема не ушла.
Всё осложняется тем, что при взрыве "осколки" получаются переопределённым методом Explode (TrensformOverrule). Этих осколков для сложных объектов может быть несколько сотен. Все объекты - новые, содержатся только в памяти, в чертёж не добавлены.
Может ли срабатывать какое-то ограничение по количеству одновременно открытых объектов в памяти?
Возможно ли какая-то некорректная работа DBObjectCollection, если в ней содержится несколько сотен объектов?
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Александр Ривилис от 26-12-2019, 17:42:12
Может ли срабатывать какое-то ограничение по количеству одновременно открытых объектов в памяти?
Возможно ли какая-то некорректная работа DBObjectCollection, если в ней содержится несколько сотен объектов?
Однозначно нет. Если бы речь шла о сотнях тысяч, миллионах открытых объектов, то еще можно было бы говорить об ограничениях.
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Дмитрий Загорулькин от 26-12-2019, 17:54:26
Добавил вывод данных об объектах. Получаю примерно такой лог:
Start civil entity exploding: AeccDbGraphProfileNetworkPart <2078C>
Objects after explode: 5
Start prosessing for #1: AcDbLine
End prosessing for #1: AcDbLine
Start prosessing for #2: AcDbLine
End prosessing for #2: AcDbLine
Start prosessing for #3: AcDbLine
End prosessing for #3: AcDbLine
Start prosessing for #4: AcDbLine
End prosessing for #4: AcDbLine
Start prosessing for #5: AcDbLine
End prosessing for #5: AcDbLine
Start civil entity exploding: AeccDbGraphProfileNetworkPart <2078B>
Objects after explode: 9
Start prosessing for #1: AcDbHatch
End prosessing for #1: AcDbHatch
Start prosessing for #2: AcDbLine
End prosessing for #2: AcDbLine
Start prosessing for #3: AcDbLine
End prosessing for #3: AcDbLine
Start prosessing for #4: AcDbLine
End prosessing for #4: AcDbLine
Start prosessing for #5: AcDbLine
End prosessing for #5: AcDbLine
Start prosessing for #6: AcDbLine
End prosessing for #6: AcDbLine
Start prosessing for #7: AcDbLine
End prosessing for #7: AcDbLine
Start prosessing for #8: AcDbLine
End prosessing for #8: AcDbLine
Start prosessing for #9: AcDbLine
End prosessing for #9: AcDbLine
Start civil entity exploding: AeccDbGraphProfileNetworkPart <2078A>
Objects after explode: 9
Start prosessing for #1: AcDbHatch
End prosessing for #1: AcDbHatch
Start prosessing for #2: AcDbLine
End prosessing for #2: AcDbLine
Start prosessing for #3: AcDbLine
End prosessing for #3: AcDbLine
Start prosessing for #4: AcDbLine
End prosessing for #4: AcDbLine
Start prosessing for #5: AcDbLine
End prosessing for #5: AcDbLine
Start prosessing for #6: AcDbLine
End prosessing for #6: AcDbLine
Start prosessing for #7: AcDbLine
End prosessing for #7: AcDbLine
Start prosessing for #8: AcDbLine
End prosessing for #8: AcDbLine
Start prosessing for #9: AcDbLine
End prosessing for #9: AcDbLine
Start civil entity exploding: AeccDbGraphProfileNetworkPart <20789>
Objects after explode: 5
Start prosessing for #1: AcDbLine
End prosessing for #1: AcDbLine
Start prosessing for #2: AcDbLine
End prosessing for #2: AcDbLine
Start prosessing for #3: AcDbLine
End prosessing for #3: AcDbLine
Start prosessing for #4: AcDbLine
End prosessing for #4: AcDbLine
Start prosessing for #5: AcDbLine
End prosessing for #5: AcDbLine
Start civil entity exploding: AeccDbVAlignment <20777>
Objects after explode: 1
Start prosessing for #1: AcDbPolyline
End prosessing for #1: AcDbPolyline
Start civil entity exploding: AeccDbVAlignment <20778>
Objects after explode: 1
Start prosessing for #1: AcDbPolyline
End prosessing for #1: AcDbPolyline
Start civil entity exploding: AeccDbGraphProfileNetworkPart <205B2>
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Hatch): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Hatch): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Objects after explode: 17
Start prosessing for #1: AcDbEllipse
End prosessing for #1: AcDbEllipse
Start prosessing for #2: AcDbEllipse
End prosessing for #2: AcDbEllipse
Start prosessing for #3: AcDbEllipse
End prosessing for #3: AcDbEllipse
Start prosessing for #4: AcDbEllipse
End prosessing for #4: AcDbEllipse
Start prosessing for #5: AcDbLine
End prosessing for #5: AcDbLine
Start prosessing for #6: AcDbLine
End prosessing for #6: AcDbLine
Start prosessing for #7: AcDbLine
End prosessing for #7: AcDbLine
Start prosessing for #8: AcDbLine
End prosessing for #8: AcDbLine
Start prosessing for #9: AcDbLine
End prosessing for #9: AcDbLine
Start prosessing for #10: AcDbEllipse
End prosessing for #10: AcDbEllipse
Start prosessing for #11: AcDbEllipse
End prosessing for #11: AcDbEllipse
Start prosessing for #12: AcDbLine
End prosessing for #12: AcDbLine
Start prosessing for #13: AcDbLine
End prosessing for #13: AcDbLine
Start prosessing for #14: AcDbLine
End prosessing for #14: AcDbLine
Start prosessing for #15: AcDbLine
End prosessing for #15: AcDbLine
Start prosessing for #16: AcDbLine
End prosessing for #16: AcDbLine
Start prosessing for #17: AcDbLine
End prosessing for #17: AcDbLine
Start civil entity exploding: AeccDbGraphProfile <2077A>
Objects after explode: 194
Start prosessing for #1: AcDbPolyline
End prosessing for #1: AcDbPolyline
Start prosessing for #2: AcDbLine
End prosessing for #2: AcDbLine
Start prosessing for #3: AcDbPolyline
End prosessing for #3: AcDbPolyline
Start prosessing for #4: AcDbHatch
End prosessing for #4: AcDbHatch
Start prosessing for #5: AcDbPolyline
End prosessing for #5: AcDbPolyline
Start prosessing for #6: AcDbLine
End prosessing for #6: AcDbLine
Start prosessing for #7: AcDbPolyline
End prosessing for #7: AcDbPolyline
Start prosessing for #8: AcDbHatch
End prosessing for #8: AcDbHatch
Start prosessing for #9: AcDbPolyline
End prosessing for #9: AcDbPolyline
Start prosessing for #10: AcDbLine
End prosessing for #10: AcDbLine
Start prosessing for #11: AcDbPolyline
End prosessing for #11: AcDbPolyline
Start prosessing for #12: AcDbHatch
End prosessing for #12: AcDbHatch
Start prosessing for #13: AcDbPolyline
End prosessing for #13: AcDbPolyline
Start prosessing for #14: AcDbLine
End prosessing for #14: AcDbLine
Start prosessing for #15: AcDbPolyline
End prosessing for #15: AcDbPolyline
Start prosessing for #16: AcDbHatch
End prosessing for #16: AcDbHatch
Start prosessing for #17: AcDbPolyline
End prosessing for #17: AcDbPolyline
Start prosessing for #18: AcDbLine
End prosessing for #18: AcDbLine
Start prosessing for #19: AcDbPolyline
End prosessing for #19: AcDbPolyline
Start prosessing for #20: AcDbHatch
End prosessing for #20: AcDbHatch
Start prosessing for #21: AcDbPolyline
End prosessing for #21: AcDbPolyline
Start prosessing for #22: AcDbLine
End prosessing for #22: AcDbLine
Start prosessing for #23: AcDbPolyline
End prosessing for #23: AcDbPolyline
Start prosessing for #24: AcDbHatch
End prosessing for #24: AcDbHatch
Start prosessing for #25: AcDbPolyline
End prosessing for #25: AcDbPolyline
Start prosessing for #26: AcDbLine
End prosessing for #26: AcDbLine
Start prosessing for #27: AcDbPolyline
End prosessing for #27: AcDbPolyline
Start prosessing for #28: AcDbHatch
End prosessing for #28: AcDbHatch
Start prosessing for #29: AcDbPolyline
End prosessing for #29: AcDbPolyline
Start prosessing for #30: AcDbLine
End prosessing for #30: AcDbLine
Start prosessing for #31: AcDbPolyline
End prosessing for #31: AcDbPolyline
Start prosessing for #32: AcDbHatch
End prosessing for #32: AcDbHatch
Start prosessing for #33: AcDbPolyline
End prosessing for #33: AcDbPolyline
Start prosessing for #34: AcDbLine
End prosessing for #34: AcDbLine
Start prosessing for #35: AcDbPolyline
End prosessing for #35: AcDbPolyline
Start prosessing for #36: AcDbHatch
End prosessing for #36: AcDbHatch
Start prosessing for #37: AcDbPolyline
End prosessing for #37: AcDbPolyline
Start prosessing for #38: AcDbLine
End prosessing for #38: AcDbLine
Start prosessing for #39: AcDbPolyline
End prosessing for #39: AcDbPolyline
Start prosessing for #40: AcDbHatch
End prosessing for #40: AcDbHatch
Start prosessing for #41: AcDbPolyline
End prosessing for #41: AcDbPolyline
Start prosessing for #42: AcDbLine
End prosessing for #42: AcDbLine
Start prosessing for #43: AcDbLine
End prosessing for #43: AcDbLine
Start prosessing for #44: AcDbLine
End prosessing for #44: AcDbLine
Start prosessing for #45: AcDbLine
End prosessing for #45: AcDbLine
Start prosessing for #46: AcDbLine
End prosessing for #46: AcDbLine
Start prosessing for #47: AcDbLine
End prosessing for #47: AcDbLine
Start prosessing for #48: AcDbLine
End prosessing for #48: AcDbLine
Start prosessing for #49: AcDbLine
End prosessing for #49: AcDbLine
Start prosessing for #50: AcDbLine
End prosessing for #50: AcDbLine
Start prosessing for #51: AcDbLine
End prosessing for #51: AcDbLine
Start prosessing for #52: AcDbLine
End prosessing for #52: AcDbLine
Start prosessing for #53: AcDbLine
End prosessing for #53: AcDbLine
Start prosessing for #54: AcDbLine
End prosessing for #54: AcDbLine
Start prosessing for #55: AcDbLine
End prosessing for #55: AcDbLine
Start prosessing for #56: AcDbLine
End prosessing for #56: AcDbLine
Start prosessing for #57: AcDbLine
End prosessing for #57: AcDbLine
Start prosessing for #58: AcDbLine
End prosessing for #58: AcDbLine
Start prosessing for #59: AcDbLine
End prosessing for #59: AcDbLine
Start prosessing for #60: AcDbLine
End prosessing for #60: AcDbLine
Start prosessing for #61: AcDbLine
End prosessing for #61: AcDbLine
Start prosessing for #62: AcDbLine
End prosessing for #62: AcDbLine
Start prosessing for #63: AcDbLine
End prosessing for #63: AcDbLine
Start prosessing for #64: AcDbLine
End prosessing for #64: AcDbLine
Start prosessing for #65: AcDbLine
End prosessing for #65: AcDbLine
Start prosessing for #66: AcDbLine
End prosessing for #66: AcDbLine
Start prosessing for #67: AcDbLine
End prosessing for #67: AcDbLine
Start prosessing for #68: AcDbLine
End prosessing for #68: AcDbLine
Start prosessing for #69: AcDbLine
End prosessing for #69: AcDbLine
Start prosessing for #70: AcDbLine
End prosessing for #70: AcDbLine
Start prosessing for #71: AcDbLine
End prosessing for #71: AcDbLine
Start prosessing for #72: AcDbLine
End prosessing for #72: AcDbLine
Start prosessing for #73: AcDbLine
End prosessing for #73: AcDbLine
Start prosessing for #74: AcDbLine
End prosessing for #74: AcDbLine
Start prosessing for #75: AcDbLine
End prosessing for #75: AcDbLine
Start prosessing for #76: AcDbLine
End prosessing for #76: AcDbLine
Start prosessing for #77: AcDbLine
End prosessing for #77: AcDbLine
Start prosessing for #78: AcDbLine
End prosessing for #78: AcDbLine
Start prosessing for #79: AcDbLine
End prosessing for #79: AcDbLine
Start prosessing for #80: AcDbLine
End prosessing for #80: AcDbLine
Start prosessing for #81: AcDbLine
End prosessing for #81: AcDbLine
Start prosessing for #82: AcDbLine
End prosessing for #82: AcDbLine
Start prosessing for #83: AcDbLine
End prosessing for #83: AcDbLine
Start prosessing for #84: AcDbLine
End prosessing for #84: AcDbLine
Start prosessing for #85: AcDbLine
End prosessing for #85: AcDbLine
Start prosessing for #86: AcDbLine
End prosessing for #86: AcDbLine
Start prosessing for #87: AcDbLine
End prosessing for #87: AcDbLine
Start prosessing for #88: AcDbLine
End prosessing for #88: AcDbLine
Start prosessing for #89: AcDbLine
End prosessing for #89: AcDbLine
Start prosessing for #90: AcDbLine
End prosessing for #90: AcDbLine
Start prosessing for #91: AcDbLine
End prosessing for #91: AcDbLine
Start prosessing for #92: AcDbLine
End prosessing for #92: AcDbLine
Start prosessing for #93: AcDbLine
End prosessing for #93: AcDbLine
Start prosessing for #94: AcDbLine
End prosessing for #94: AcDbLine
Start prosessing for #95: AcDbLine
End prosessing for #95: AcDbLine
Start prosessing for #96: AcDbLine
End prosessing for #96: AcDbLine
Start prosessing for #97: AcDbLine
End prosessing for #97: AcDbLine
Start prosessing for #98: AcDbLine
End prosessing for #98: AcDbLine
Start prosessing for #99: AcDbLine
End prosessing for #99: AcDbLine
Start prosessing for #100: AcDbLine
End prosessing for #100: AcDbLine
Start prosessing for #101: AcDbLine
End prosessing for #101: AcDbLine
Start prosessing for #102: AcDbLine
End prosessing for #102: AcDbLine
Start prosessing for #103: AcDbLine
End prosessing for #103: AcDbLine
Start prosessing for #104: AcDbLine
End prosessing for #104: AcDbLine
Start prosessing for #105: AcDbLine
End prosessing for #105: AcDbLine
Start prosessing for #106: AcDbLine
End prosessing for #106: AcDbLine
Start prosessing for #107: AcDbLine
End prosessing for #107: AcDbLine
Start prosessing for #108: AcDbLine
End prosessing for #108: AcDbLine
Start prosessing for #109: AcDbLine
End prosessing for #109: AcDbLine
Start prosessing for #110: AcDbLine
End prosessing for #110: AcDbLine
Start prosessing for #111: AcDbLine
End prosessing for #111: AcDbLine
Start prosessing for #112: AcDbLine
End prosessing for #112: AcDbLine
Start prosessing for #113: AcDbLine
End prosessing for #113: AcDbLine
Start prosessing for #114: AcDbLine
End prosessing for #114: AcDbLine
Start prosessing for #115: AcDbLine
End prosessing for #115: AcDbLine
Start prosessing for #116: AcDbLine
End prosessing for #116: AcDbLine
Start prosessing for #117: AcDbLine
End prosessing for #117: AcDbLine
Start prosessing for #118: AcDbLine
End prosessing for #118: AcDbLine
Start prosessing for #119: AcDbLine
End prosessing for #119: AcDbLine
Start prosessing for #120: AcDbLine
End prosessing for #120: AcDbLine
Start prosessing for #121: AcDbLine
End prosessing for #121: AcDbLine
Start prosessing for #122: AcDbLine
End prosessing for #122: AcDbLine
Start prosessing for #123: AcDbLine
End prosessing for #123: AcDbLine
Start prosessing for #124: AcDbLine
End prosessing for #124: AcDbLine
Start prosessing for #125: AcDbLine
End prosessing for #125: AcDbLine
Start prosessing for #126: AcDbLine
End prosessing for #126: AcDbLine
Start prosessing for #127: AcDbLine
End prosessing for #127: AcDbLine
Start prosessing for #128: AcDbLine
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
End prosessing for #128: AcDbLine
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Start prosessing for #129: AcDbLine
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
End prosessing for #129: AcDbLine
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Start prosessing for #130: AcDbLine
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
End prosessing for #130: AcDbLine
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Start prosessing for #131: AcDbLine
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Exception thrown: 'System.AccessViolationException' in Acdbmgd.dll
Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.

Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
The thread 0x1768 has exited with code 0 (0x0).
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
The thread 0x3f94 has exited with code 0 (0x0).
The thread 0x2934 has exited with code 0 (0x0).
The thread 0x222c has exited with code 0 (0x0).
The thread 0x4fa0 has exited with code 0 (0x0).
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Hatch): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Hatch): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Hatch): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Hatch): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Hatch): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Hatch): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Hatch): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Hatch): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Hatch): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Hatch): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Polyline): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.MText): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
Forgot to call Dispose? (Autodesk.AutoCAD.DatabaseServices.Line): DisposableWrapper
The thread 0x53e4 has exited with code 0 (0x0).
The program '[8976] acad.exe' has exited with code 1 (0x1).
Конечно же, смущает обилие "Forgot to call Dispose". Но, вроде как, это некритично, если переопределяется Explode. Мы это как-то обсуждали уже: https://adn-cis.org/forum/index.php?topic=7036.0
Может это быть причиной сбоев в данном случае?
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Александр Ривилис от 26-12-2019, 18:01:56
Может это быть причиной сбоев в данном случае?
Маловероятно. Но я бы предположил баг в AutoCAD... Или в другом месте программы...
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Дмитрий Загорулькин от 26-12-2019, 18:10:12
Понял! Спасибо! Буду искать дальше...
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Привалов Дмитрий от 27-12-2019, 06:57:39
AccesViolationException .... Может ли срабатывать какое-то ограничение по количеству одновременно открытых объектов в памяти?
встречал что-то подобное, когда использовал id.Open, заменял на tr.GetObject и все работало.
С причинами не разбирался. Мне показалось, что что-то не закрываю после id.Open и повторный вызов id.Open вызывает AccesViolationException.
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Дмитрий Загорулькин от 20-01-2020, 13:24:51
Я уже несколько раз переписывал проблемный кусок.
- Заменил все Open на использование транзакции.
- Предположил, что некорректно обрабатываются объекты из-за того, что не добавлены в базу данных. Все объекты после взрыва добавляю в базу данных, независимо от того, нужны они мне или нет. Ненужные потом удаляю в конце работы команды.
- Предположил, что DBObjectCollection как-то внутри некорректно работает. Переписал таким образом, что DBObjectCollection сразу после взрыва передаёт объекты в обычный массив и больше не используется.
- Предположил, что есть проблема, если одна транзакция на всё слишком долго держит открытыми много объектов. Переписал так, что на каждое действие открывается новая транзакция, которая закрывается сразу после выполнения действия.
Ничего не помогло  :(
Сейчас в раздумьях: то ли оставить пока как есть - проблема возникает только в некоторых отдельных чертежах и не в 100% случаях. Либо что-то с этим ещё попробовать сделать. Но вот что именно - идей нет никаких.
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Привалов Дмитрий от 20-01-2020, 15:04:57
Я уже несколько раз переписывал проблемный кусок.
- Заменил все Open на использование транзакции.

Когда у меня возникла проблема были идеи, но я не стал их тогда проверять Transaction сработала:

1) нельзя вызывать id.Open, нужно сначала как-то проанализировать, не открыт ли он, потом закрыть объект и открыть вновь.

2) Если открываешь объект через id.Open на запись и обращаешься к свойствам, вызываешь методы, то это может спровоцировать открытие других объектов, например контура видового экрана, масштаба аннотации, блока у мультивыноски и т.д. и не обязательно id.close() первичного объекта закроет эти второстепенные объекты.

...но возможно это не те причины.
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Александр Ривилис от 20-01-2020, 15:07:33
1) нельзя вызывать id.Open, нужно сначала как-то проанализировать, не открыт ли он, потом закрыть объект и открыть вновь.
id.Open не приведёт к Fatal Error даже если объект уже открыт - может быть просто обычный Exception.
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Привалов Дмитрий от 20-01-2020, 15:26:54
определяется, надо ли полученный объект добавлять в чертёж
если надо - объект добавляется в модель
если не надо - объект уничтожается


Попробуй  ничего не добавлять после разбивки.
Если ошибок не будет, посмотри список типов объектов, попробуй методом исключения найти вредный тип.

Если ошибки будут, то значит на этапе разбивки что-то вылетает, попробуй методом исключения вычислить что за объект.
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Дмитрий Загорулькин от 20-01-2020, 17:15:06
Попробуй  ничего не добавлять после разбивки.
Если ошибок не будет, посмотри список типов объектов, попробуй методом исключения найти вредный тип.

Если ошибки будут, то значит на этапе разбивки что-то вылетает, попробуй методом исключения вычислить что за объект.
Да там настолько рандомно сыпется, что никакие стандартные подходы по отладке не работают. У меня уже куча разных данных - на каких объектах падает, их состояние в момент падения и тд и тп. Но суть в том, что в этом объёме информации нет никакой закономерности. Я знаю на чём именно падает - метод взрыва объектов Civil 3D и добавление этих объектов в БД чертежа. Я знаю что это за объекты - это либо вид профиля, либо метка трубы, либо метка колодца. При этом, для этих объектов переопределён моим кодом метод Explode через TransformOverrule. Это довольно сложная связка, поэтому, фик поймёшь где именно идёт сбой. И не "выдрать" сбойный метод из проекта для того чтобы тут как пример показать - очень сложной получится операция извлечения...
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Дмитрий Загорулькин от 20-01-2020, 19:02:36
Похоже, причина в криворукости... Обнаружил, что мой код работал с объектами, которые были созданы и добавлены в чертёж в рамках транзакции, но уже после того, как транзакция закрыта. Исправил - стало работать со стабильностью примерно 1 вылет на 10 успешных отработок. Завтра на свежую голову продолжу поиски - возможно, что где-то ещё есть такие "чудесные" решения...
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Дмитрий Загорулькин от 21-01-2020, 18:38:56
Всё-таки, видимо, что-то "внутри" работает не так.
Я заменил метод Explode на прямое получение примитивов у тех объектов, которые я переопределяю с помощью TransformOverrule. Вылеты практически исчезли.
Но изредка теперь вываливается новое исключение: eAtMaxReaders. То есть, объект открыт максимальное количество раз на чтение. Но, т.к. я теперь везде использую транзакции, это выглядит как-то странно. Причём, транзакции очень короткие - несколько действий и сразу коммит и закрытие.
Вот, например, место, в котором в последний раз выскочила eAtMaxReaders (строки 3-4):
Код - C# [Выбрать]
  1. using (Transaction tr = db.TransactionManager.StartTransaction())
  2. {
  3.     AcDb.Entity firstExplodeObj = tr.GetObject
  4.         (firstExplodeObjId, OpenMode.ForRead, false, true) as AcDb.Entity;
  5.  
  6.     // Если это блок
  7.     isAnonBlk = firstExplodeObj is BlockReference blkRef
  8.         // и это анонимный блок
  9.         && blkRef.Name.StartsWith("*U", StringComparison.OrdinalIgnoreCase);
  10.  
  11.     tr.Commit();
  12. }
  13.  
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Александр Ривилис от 21-01-2020, 19:03:19
Вот, например, место, в котором в последний раз выскочила eAtMaxReaders (строки 3-4):
Ну значит где-то в другом месте он уже открыт (и не закрыт) 255 раз. Вполне возможно что и в недрах AutoCAD (а скорее Civil 3D).
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Привалов Дмитрий от 21-01-2020, 23:51:58
using (Transaction tr = db.TransactionManager.StartTransaction())
{
    AcDb.Entity firstExplodeObj = tr.GetObject
        (firstExplodeObjId, OpenMode.ForRead, false, true) as AcDb.Entity;
 
    // Если это блок
    isAnonBlk = firstExplodeObj is BlockReference blkRef
        // и это анонимный блок
        && blkRef.Name.StartsWith("*U", StringComparison.OrdinalIgnoreCase);
 
    tr.Commit();
}
 

1. Стоит поискать объекты, которые вызывают вылеты при Explode.
Может не все, что содержится после Explode стоит добавлять в текущее пространство.

2. Код скорее всего кусок из реального кода? По куску несколько вопросов возникает: после  "as AcDb.Entity;" нужно проверять на null, т.к. нет гарантии, что это Entity.
...далее ты хочешь работать с BlockReference, но внешние ссылки это тоже BlockReference и Table унаследован от BlockReference  и кто знает, может в Civil имеются еще объекты унаследованные от BlockReference. Возможно они вызывают ошибки с Explode.

пару ссылок по eAtMaxReaders
https://forums.autodesk.com/t5/net/eatmaxreaders-on-database-insert-objects-not-being-closed/td-p/7574819
https://forums.autodesk.com/t5/objectarx/an-error-quot-eatmaxreaders-quot/td-p/312652?profile.language=ru

в первой ссылке возможно подсказка, внутри динамических блоков могут содержаться операции и параметры, можно посмотреть, что остается после explode динамических блоков.
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Александр Ривилис от 22-01-2020, 00:12:24
По куску несколько вопросов возникает: после  "as AcDb.Entity;" нужно проверять на null, т.к. нет гарантии, что это Entity.
100%. Я с этим сталкивался.
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Александр Ривилис от 22-01-2020, 00:41:34
Дмитрий Загорулькин,
Кстати, BlockReference.Name открывает соответствующий BlockTableRecord и уже оттуда берёт Name. Очень надеюсь, что в этом коде всё чисто и он сколько раз открывает, столько раз и закрывает.
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Привалов Дмитрий от 22-01-2020, 08:04:17
Кстати, BlockReference.Name открывает соответствующий BlockTableRecord и уже оттуда берёт Name.
Ну вот и возможная причина eAtMaxReaders, т.к. может быть большое количество однотипных блоков.

Очень надеюсь, что в этом коде всё чисто и он сколько раз открывает, столько раз и закрывает.
А он это кто? Кто по идее должен закрывать BlockTableRecord, свойство BlockReference.Name, транзакция или в коде отдельно нужно дополнительно дописывать закрытие BlockTableRecord?
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Александр Ривилис от 22-01-2020, 10:13:14
А он это кто?
Он - это код метода/свойства BlockReference.Name. В этом методе транзакция не используется. Там всё на Open/Close, но код достаточно запутанный,  так что на 100% я не уверен, что в нём на каждый Open найдётся его Close. Но по логике всё должно быть внутри него и внешний Close не требуется.
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Дмитрий Загорулькин от 22-01-2020, 10:25:34
1. Стоит поискать объекты, которые вызывают вылеты при Explode.
Может не все, что содержится после Explode стоит добавлять в текущее пространство.
Всегда разные объекты. Вылеты нестабильны. На одном и том же чертеже с одними и теми же объектами может корректно отработать, а может споткнуться. У меня сложилось впечатление, что это не объекты вызывают вылет при Explode, а какие-то скрытые внутренние дефекты.
Код скорее всего кусок из реального кода?
Да.
после  "as AcDb.Entity;" нужно проверять на null, т.к. нет гарантии, что это Entity.
В коде есть проверка на BlockReference. Если в неё придёт null, то она вернёт false. Дополнительно на null проверять будет излишним.
...далее ты хочешь работать с BlockReference, но внешние ссылки это тоже BlockReference и Table унаследован от BlockReference  и кто знает, может в Civil имеются еще объекты унаследованные от BlockReference. Возможно они вызывают ошибки с Explode.
В коде обрабатываются объекты, полученные после первого взрыва объекта Civil 3D. Поэтому, там не может быть ни таблиц ни внешних ссылок. Может быть анонимный блок - если используется базовый метод Explode, либо простые примитивы - если был взорван объект, для которого я переопределил Explode через TransformOverrule.
внутри динамических блоков могут содержаться операции и параметры, можно посмотреть, что остается после explode динамических блоков.
Динамические блоки не взрываю. Только объекты Civil 3D.
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Дмитрий Загорулькин от 22-01-2020, 10:31:26
Кстати, BlockReference.Name открывает соответствующий BlockTableRecord и уже оттуда берёт Name. Очень надеюсь, что в этом коде всё чисто и он сколько раз открывает, столько раз и закрывает.
Попробовать брать Name из BlockTableRecord? В смысле, самому его открывать-читать-закрывать.
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Александр Ривилис от 22-01-2020, 10:33:47
Кстати, BlockReference.Name открывает соответствующий BlockTableRecord и уже оттуда берёт Name. Очень надеюсь, что в этом коде всё чисто и он сколько раз открывает, столько раз и закрывает.
Попробовать брать Name из BlockTableRecord? В смысле, самому его открывать-читать-закрывать.
Ага.
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Дмитрий Загорулькин от 22-01-2020, 10:43:05
Хм, тогда получать имя нет смысла. Есть у BlockTableRecord нужное свойство:
Код - C# [Выбрать]
  1. bool isAnonBlk = false;
  2.  
  3. using (Transaction tr = db.TransactionManager.StartTransaction())
  4. {
  5.     AcDb.Entity firstExplodeObj = tr.GetObject
  6.         (firstExplodeObjId, OpenMode.ForRead, false, true) as AcDb.Entity;
  7.  
  8.     // Если это блок
  9.     if (firstExplodeObj is BlockReference blkRef)
  10.     {
  11.         BlockTableRecord blkRec = tr.GetObject
  12.             (blkRef.BlockTableRecord, OpenMode.ForRead) as BlockTableRecord;
  13.  
  14.         // и это анонимный блок
  15.         isAnonBlk = blkRec.IsAnonymous;
  16.     }
  17.  
  18.     tr.Commit();
  19. }
  20.  

Сейчас буду тестировать
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Дмитрий Загорулькин от 22-01-2020, 11:03:07
Не помогло. На третий раз выдало исключение.
Приложение не поддерживает оперативную (JIT)
отладку. Подробная информацию приводится в конце данного сообщения.

************** Текст исключения **************
Autodesk.AutoCAD.Runtime.Exception: eAtMaxReaders
   в Autodesk.AutoCAD.DatabaseServices.TransactionManager.GetObjectInternal(AcDbTransactionManager* pTM, ObjectId id, OpenMode mode, Boolean openErased, Boolean forceOpenOnLockedLayer)
   в Autodesk.AutoCAD.DatabaseServices.Transaction.GetObject(ObjectId id, OpenMode mode, Boolean openErased, Boolean forceOpenOnLockedLayer)
   в <...>.PViewObjectsData.ExplodeCivilObject(ObjectId id, ObjectId mSpaceId, Extents3d pViewExts, List`1 AllTmpObjectIds) в <...>\PViewObjectsData.cs:строка 208
   <...>
Чертёж был открыт непосредственно перед выполнением команды.
Видимо, проблема где-то до этого куска. Здесь просто она проявляется.
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Александр Ривилис от 22-01-2020, 11:22:25
Видимо, проблема где-то до этого куска. Здесь просто она проявляется.
Ну да. Объект то уже открыт 255 раз до того. И видимо не в этом месте.
А как у тебя обстоят дела с обработчиками событий или Overrule? Не может быть что где-то там этот объект открывается и не всегда закрывается???
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Дмитрий Загорулькин от 22-01-2020, 11:54:43
А как у тебя обстоят дела с обработчиками событий или Overrule? Не может быть что где-то там этот объект открывается и не всегда закрывается???
Специально я такого не делал. Если только ошибка где-то... Но все другие инструменты работают нормально. Поэтому, предполагаю, что с этим всё в порядке.
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Александр Ривилис от 22-01-2020, 11:59:29
Специально я такого не делал.
В смысле нет обработчиков событий и Overrule? Кстати, а "любимый" SPDS Extension не установлен? Это я так на всякий случай...
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Дмитрий Загорулькин от 22-01-2020, 15:39:48
В том смысле, что есть и обработчики событий и Overrule. Но они вроде как аккуратно работают и проблем не создают. Пробовал отключить обработку событий объектов базы данных - ситуация не изменилась, исключение выскакивает периодически. Overrule отключить не могу - мне надо чтобы работало с ним. Без него нет смысла в этой команде.
SPDS не ставил. Я же не враг самому себе  :)
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Александр Ривилис от 22-01-2020, 15:47:56
Overrule отключить не могу - мне надо чтобы работало с ним.
В нём (или в них) ты что-нибудь открываешь (не важно - в транзакции или Open)?
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Дмитрий Загорулькин от 22-01-2020, 16:01:23
В нём (или в них) ты что-нибудь открываешь (не важно - в транзакции или Open)?
Да. Например, при переопределении труб и колодцев на виде профиля. Чтобы получить нужные параметры, допустим, трубы, открываются на чтение: вид профиля, трасса вида профиля, труба в модели, присоединённые колодцы в модели и т.п. Открываются с помощью Open/Close с использованием через using.
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Александр Ривилис от 22-01-2020, 16:04:07
Дмитрий Загорулькин,
Если я правильно понял, то eAtMaxReaders у тебя возникает только на BlockReference. Так что нужно смотреть только на них.
Название: Re: Есть ли какое-то ограничение на количество одновременно открытых объектов?
Отправлено: Дмитрий Загорулькин от 23-01-2020, 12:07:20
Дальше уже без погружения в Civil 3D API не получается. Поэтому, создал новую тему в соответствующем разделе: https://adn-cis.org/forum/index.php?topic=9691.0