当前位置: 首页 > 编程语言 > C#

FileStream构造函数和默认缓冲区大小共享

时间:2023-04-10 11:59:15 C#

FileStream构造函数和默认缓冲区大小我们有一个使用.NET4用C#编写的日志类。我想添加一个构造函数参数,可以选择设置FileOptions.WriteThrough标志在构建FileStream时。由于这是广泛使用的库代码,我想尽可能少地更改。现有FileStream构造函数调用:_stream=newFileStream(_filePath,FileMode.Append,FileAccess.Write,FileShare.Read);问题:我向我的构造函数添加了一个名为writeDirectToDisk的可选bool参数。我想我可以做这样的事情:varfileOptions=writeDirectToDisk?FileOptions.WriteThrough:FileOptions.None;_stream=newFileStream(_filePath,FileMode.Append,FileAccess.Write,FileShare.Read,fileOptions);但是不,没有这样的超载!除非我遗漏了什么,否则接受FileOptions参数的FileStream构造函数的唯一重载也采用缓冲区大小参数!我试过什么:我试过将缓冲区大小设置为零,希望使用默认缓冲区大小,但没有抛出异常。我已经搜索过,但在指定默认缓冲区大小的框架中找不到某些静态属性或常量。我的问题:在这个阶段我并不是特别在意默认缓冲区大小是多少字节。我只是想知道如何以尽可能少的代码影响将FileOptions参数添加到构造函数?我想知道是否缺少一些我可以用作缓冲区大小参数的常量或静态变量,或者是否缺少一个过载,或者是否有一些更聪明的方法来执行此操作。我还想知道在指定FileOptions.WriteThrough时缓冲区大小是否无关紧要在这种情况下我可以这样做:if(writeDirectToDisk){_stream=newFileStream(_filePath,FileMode.Append,FileAccess.Write,FileShare.Read,1,文件选项.WriteThrough);//1是允许的最小值,它实际上是8个字节}else{_stream=newFileStream(_filePath,FileMode.Append,FileAccess.Write,FileShare.Read);}但我宁愿不这样做,除非真的没有更优雅的方式。您可以使用自己的工厂方法来构造一个FileStream。除此之外,您还可以硬连接使用Reflector(0x1000)发现的缓冲区大小。这里的默认缓冲区大小可以在.Net的源代码中看到。.Net不支持WriteThrough。您可以使用非托管WinAPI调用,您确实需要该功能。我只花了一天时间试验它,使用它没有任何好处。10多年前情况并非如此,缓存对速度有显着影响。出于兴趣,有人好心地编写了整个库来进行API调用,可在此处获取。以上就是C#学习教程的全部内容:FileStream构造函数和默认缓冲区大小分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: