簡體   English   中英

讀取C#或C ++中的二進制文件

[英]Read binary file in C# or C++

我必須將二進制文件數據讀取到C#winform應用程序中。

二進制讀取是頻繁的,即許多形式讀取數據的不同部分。

我可以創建一個C ++ dll來讀取二進制文件並在C#應用程序中使用它。

要么

我可以在C#中擁有讀取邏輯。

性能的主要問題。

如果我將其寫入C#,它將為我提供C ++以來的照明速度。

如果我使用C ++,並且每次C#應用程序通過接口調用它,則總體速度將相同。

從磁盤讀取主要是一個受I / O約束的操作,因此,如果以C#或C ++編寫,則幾乎沒有什么區別。

為了最大程度地提高性能,我建議一次性將整個文件讀入內存(假設文件不是太大),而不是在文件中前后搜索以讀取不同部分。

您的瓶頸不應該是代碼,而應該是硬盤訪問權限,因此,使用哪種語言並不重要。 根據您的經驗(以及您要投入的工作量),在c#中完全有可能比在c ++中完全完成它要快得多。 C#作為一種語言並沒有比c ++慢很多(特別是因為用c ++輕松地朝着性能方向發展很容易),並且您獲得了整個.net框架,該框架為大多數事情提供了性能上適當的解決方案(我想streamreader類的緩沖要多一些,然后您會自動使用c ++,這會大大提高性能)。

通常,這似乎是可能過早優化的情況,我們知道這是邪惡的。 這部分真的對性能敏感嗎? 我猜不會(當然,我可能錯了)。 如果是的話,這種語言會有所作為嗎? 可能不(將執行您編寫的指令(一些算術,一些函數調用)以讀取文件的時間(可能以納秒或微秒為單位)與典型硬盤的毫秒級搜索時間進行比較。區別在於,這很可能僅取決於訪問模式和緩沖量,例如,一次將較大的塊(即使不需要一些數據)一次讀入內存可能會更好,如果這樣做的話減少了讀取訪問的次數(特別是查找),但是首先要以明顯的方式進行寫入,並且僅在必要時進行優化

在C#中,您可以通過P / Invoket使用WinAPI文件管理功能,並且此代碼的​​性能含義相同(或稍慢)。

還在.NET 4中添加了MemoryMappedFile類該類使您可以將大型文件直接映射到內存中,並且仍然使用安全的.NET方法。

最后一句話:您可以使用P / Invoke(一次以上)在C#中創建文件映射。

因此結論是:您可以毫無疑問地將C#用於您的應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM