this article에 따르면 OpenXML은 "MemoryStreams 최고점에 도달"하고 IsolatedStorage로 전환해야하는 경우 스레드로부터 안전하지 않습니다.OpenXML Isolated 스토리지 스레딩
UNCOMPRESSED 데이터가 그 크기의 10 배이기 때문에 1MB 미만의 통합 문서에서 발생합니다.
필자는 실제로 xlsx 파일을 동시에, 특히 동시성이있는 비정상적으로 큰 파일을 만들어야합니다. MS 솔루션은 다음과 같은 것을 구현하는 것입니다 (C#에서 변환),하지만 이것으로 무엇을 해야할지 모르겠습니다.
Public Class PackagePartStream
Private _stream As Stream
Private Shared _m As New Mutex(False)
Public Sub New(ByVal Stream As Stream)
_stream = Stream
End Sub
Public Function Read(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer) As Integer
Return _stream.Read(buffer, offset, count)
End Function
Public Sub Write(ByVal buffer() As Byte, ByVal offset As Integer, ByVal count As Integer)
_m.WaitOne(Timeout.Infinite, False)
_stream.Write(buffer, offset, count)
_m.ReleaseMutex()
End Sub
Public Sub Flush()
_m.WaitOne(Timeout.Infinite, False)
_stream.Flush()
_m.ReleaseMutex()
End Sub
End Class
내 추측은 지금까지이 같은 것입니다하지만 난이 단순화 이상 해요 느낌이와 뮤텍스의 OpenXML의 WriteElement에게
Dim stream As New PackagePartStream()
Using document As SpreadsheetDocument = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook, True)
WriteExcelFile(ds, document)
End Using
나는 천국을 처리하는 기능에 더 가깝게 할 필요가 .NET에서 많은 스레딩을 수행했지만, 누군가가 올바른 방향을 가리킬 수 있기를 바랍니다.