2013-03-21 17 views
7

W Javie użyłbym biblioteki java.nio i użyłem FileChannel.transferTo() i FileChannel.transferFrom(). Czy jest coś podobnego w (konkretnie) C# czy też będę musiał załadować gdzieś niezamknięte .dll? Google nie był przydatny w tym przypadku.Czy istnieje sposób wykonywania zerowego kopiowania w .NET?

Edycja: powinienem zauważyć, że jestem kierowany na .NET 3.5.

+1

Wydaje mi się, że szukasz pliku [TransmitFile API] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms740565.aspx) i wygląda na to, że należy go PInvoke . Jestem prawie pewien, że zarządzane klasy Stream nie wykonują zerowego kopiowania. –

+0

@JohnRasch, który wygląda jak ... Uznałem również, że zarządzane klasy nie będą wykonywać zerowej kopii. – Logan

+0

A na samym dole ktoś powiedział, że nie lubi plików> 2 GB: 'Dla plików> 2 GB, kończy się niepowodzeniem z ERROR_INVALID_PARAMETER' – Logan

Odpowiedz

2

Myślę, że najlepiej działającym odpowiednikiem może być UnmanagedMemoryStream.

Klasa ta umożliwia dostęp do pamięci niekontrolowana wykorzystaniem istniejącej stream opartej modelu i nie wymaga, aby zawartość w pamięci niekontrolowana być kopiowane do sterty.

Chociaż nigdy nie miałem powodu, aby to zrobić, więc nie mogę ręczyć za stosowność tej klasy (lub użycie niezarządzanego kodu/pamięci w twoim scenariuszu).

+0

@LoganDam Co zrobiłeś w końcu? (Możesz wysłać/zaakceptować własne rozwiązanie). Mogę tylko założyć, że mój downwizor robił to na podstawie twojego oświadczenia _ "... czy też będę musiał załadować niezarządzanego .dll skądś". W przypadku, gdyby link nie był jasny, jest to klasa .NET Framework, dostępna od razu po zainstalowaniu w dowolnej aplikacji klasy lub konsoli poprzez 'mscorlib.dll'. – Sepster

+0

Nic jeszcze nie zrobiłem. To było pytanie badawcze :) kiedy (jeśli) w końcu przejdę do realizacji, na pewno wrócę i zaktualizuję to pytanie. – Logan

+0

@LoganDam Cool. Będę zainteresowany tym, jak sobie z tym poradzić, więc zadaj pytanie jako ulubione. Powodzenia z nim ;-) – Sepster