.NET 클래스 개체에서 ADODB.RecordSet을 할당해야하고 올바르게 수행하고 있는지 확실하지 않습니다. 클래스 Order
의 객체로 구성된 orderList라는 List가 있고이 목록에서 RecordSet을 생성해야한다고 가정합니다 (참조로 adodb가 있습니다). 내 코드는 다음과 같습니다 :VBOD에서 개체의 값을 할당하는 ADODB.RecordSet의 성능이 좋지 않음
Dim rs As Recordset = New Recordset
rs.Fields.Append("ID", DataTypeEnum.adInteger)
rs.Fields.Append("Sender", DataTypeEnum.adBSTR)
rs.Fields.Append("Receiver", DataTypeEnum.adBSTR)
...
rs.Open()
For Each o In orderList
rs.AddNew()
rs.Fields("ID").Value = o.ID
rs.Fields("Sender").Value = o.Sender
rs.Fields("Receiver").Value = o.Receiver
...
Next
내 테스트에서 목록에 10000 개의 개체가있는 경우 3 초 이상 비교적 긴 시간이 소요됩니다. 주문 건수가 백만 건 이상일 수 있기 때문에 이것은 느립니다. 나는 RecordSet
을 제대로 사용하고 있는지 의심 스럽다. 왜냐하면 나는 RecordSet
이 정상적으로 테이블에 직접 연결된다는 것을 알기 때문이다. 레코드를 하나씩 할당하는 것이 옳다고 생각하지 않습니다. 그러나 이것은 내가 생각해 낼 수있는 유일한 방법입니다 (그리고 몇몇 링크는 이것을 제안합니다. 거기에 성능에 대해서는 언급하지 않지만). 우리는 자체 데이터 액세스 레이어 라이브러리를 가지고 있으며 대부분의 대상 객체는 항상 메모리에 존재하므로 RecordSet을 데이터베이스에 직접 사용하고 싶지 않습니다.
제 질문은 어떻게하면 코드를 수정하여 빠르게 실행할 수 있습니까? '출처'는 반드시 List
일 필요는 없습니다. 모든 .NET 유형이 될 수 있습니다. 그러나 대상은 다른 구성 요소의 입력 요구 사항이므로 RecordSet
개체가 있어야합니다.
답장을 보내 주셔서 감사합니다. 실제로 정수 인덱스를 사용하는 테스트에서 성능이 향상되지는 않지만 소비되는 시간은 거의 같습니다. 그러나 필드 참조를 사용하면 성능이 향상되지만 내 경우에는 절반 정도의 시간이 절약됩니다. 이것은 내가하는 방법입니다 : For Each 루프 전에, 나는 ADODB.Field = rs.Fields.Item ("ID"), Dim f2 ADODB.Field = rs.Fields.Item ("Sender")와 같이 Dim f1을 선언합니다. 루프 내부에서 f1.value = o.ID f2.value = o.Sender와 같은 참조를 사용할 수 있습니다. – tete
니스! 질문에 대한 업데이트 또는 답변으로 게시하여 더 나은 가시성을 얻을 수 있습니다. – nunzabar