频繁Flush当然会影响些性能,不过只要在能够接受的范围内就可以,像StreamWriter类也有AutoFlush属性自动Flush。也可以自己设置FileStream的buffer的大小,它默认是4KB。(这个Flush也不能确保写到磁盘,不过一般场合就够了) 一般情况,用户的非法操作导致的异常是在UI线程。如果是winform可以使用Application.ThreadException截获所有UI上的异常。类似的wpf上有Dispatcher.UnhandledException。这种UI线程上的截获一般更"靠近"异常发生的地方,所以先通过这些来统一处理。这样子程序可能还能恢复成可用的状态。 然后,可以使用AppDomain的UnhandledException事件,统一对没有截获的异常做处理。但是这个时候已经无法阻止程序退出了。当然如果是被任务管理器强制结束,那这些事件都没有。 最理想的方式是把UI和接收数据写文件的进程彻底隔离。使用一个新的进程来接收数据和写文件,UI只是和这个进程进行进程间交互。那么UI的异常只要不给工作进程发错误的指令就没有关系。这样也利于一组人维护底层,另一组人维护UI,甚至做多版本UI,比如迅雷就是这么做的。
[quote=引用 3 楼 sp1234 的回复:] [quote=引用 楼主 u010412702 的回复:] 2.不断的开启和关闭数据流,每存一部分数据就关闭,然后再开启。这样可能会大大影响效率?底层基础比较弱,我也没有仔细去测试。
而接收方之后再写完到磁盘里,
[quote=引用 4 楼 SPFarm 的回复:] 文件流有一个flush方法。每次你写完了就flush一次,那么内存里的内容就被写到磁盘上了。即使程序意外退出了,之前的内容已经在磁盘上了,所以不会丢失。
[quote=引用 楼主 u010412702 的回复:] 2.不断的开启和关闭数据流,每存一部分数据就关闭,然后再开启。这样可能会大大影响效率?底层基础比较弱,我也没有仔细去测试。
文件流有一个flush方法。每次你写完了就flush一次,那么内存里的内容就被写到磁盘上了。即使程序意外退出了,之前的内容已经在磁盘上了,所以不会丢失。
2.不断的开启和关闭数据流,每存一部分数据就关闭,然后再开启。这样可能会大大影响效率?底层基础比较弱,我也没有仔细去测试。
a = b /c;
if(c!=0)
110,533
社区成员
642,574
社区内容
加载中
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧