BIN文件对象数据库,直接存储对象做数据库,小型项目用它准没错
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.IO; 6 using System.Runtime.Serialization.Formatters.Binary; 7 8 namespace MsChartHelp 9 { 10 static class FileSerialize 11 { 12 //获取文件时可以直接拿数组 13 public static T GetFileInfo<T>(string filePath) where T : new() 14 { 15 T t = new T(); 16 CreateFile<T>(filePath); 17 FileStream fs = new FileStream(filePath, FileMode.Open); 18 BinaryFormatter bf = new BinaryFormatter(); 19 if (fs.Length < 1) { return t; } 20 t = (T)(bf.Deserialize(fs)); 21 fs.Close(); 22 return t; 23 } 24 25 //BIN文件是否存在 26 private static void CreateFile<T>(string filePath) where T : new() 27 { 28 T t = new T(); 29 if (!File.Exists(filePath)) 30 { 31 FileStream fs = new FileStream(filePath, FileMode.Create); 32 BinaryFormatter bs = new BinaryFormatter(); 33 bs.Serialize(fs, t); 34 fs.Close(); 35 } 36 } 37 38 //保存数组LIST<U> 39 public static void Save<u>(string filePath, List<u> South) 40 { 41 List<u> souTrim = (List<u>)South; 42 FileStream fs = new FileStream(filePath, FileMode.Create); 43 BinaryFormatter bff = new BinaryFormatter(); 44 try 45 { 46 bff.Serialize(fs, souTrim); 47 } 48 catch (Exception) 49 { 50 51 throw; 52 } 53 finally 54 { 55 56 fs.Close(); 57 } 58 } 59 60 61 public static void Save<T>(string filePath, T South) 62 { 63 FileStream fs = new FileStream(filePath, FileMode.Create); 64 BinaryFormatter bff = new BinaryFormatter(); 65 try 66 { 67 bff.Serialize(fs, South); 68 } 69 catch (Exception) 70 { 71 72 throw; 73 } 74 finally 75 { 76 77 fs.Close(); 78 } 79 } 80 } 81 }
缺点
1.如果有10w条记录,修改一条你就需要重写这个BIN文件,开销相当大,另外如果只是查询一条记录你也需要重新将这个BIN所有内容加载到内存建立对应的对象。
2.Access, SQL Server可以简单理解做了2件事情,第一他提供了统一界面,任何语言任何进程通过sql都可以与之通讯,获取数据。
第二件事情他提供了索引机制,通过索引不需要加载所有数据到内存就能根据sql定位查询结果。
3.修改对象结构会造成数据无法读取,需要保留原对象与新对象,将原数据读取至原对象,然后通过程序转换到新对象,将新对象重新保存在一个新文件(BIN)里面,最后原对象文件和原数据文件(BIN)删除。
4.实时保存,不建议实时保存,等所有处理完毕延迟保存数据最好。
但是如果你的应用很小,内存足够hold住数据,且不需要实时保存,那么此方法是可行的,而且可以说比用access都好,呵呵。
具体问题具体分析,合适就好。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。