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 }
View Code

 

 

缺点

1.如果有10w条记录,修改一条你就需要重写这个BIN文件,开销相当大,另外如果只是查询一条记录你也需要重新将这个BIN所有内容加载到内存建立对应的对象。


2.Access, SQL Server可以简单理解做了2件事情,第一他提供了统一界面,任何语言任何进程通过sql都可以与之通讯,获取数据。

第二件事情他提供了索引机制,通过索引不需要加载所有数据到内存就能根据sql定位查询结果。

3.修改对象结构会造成数据无法读取,需要保留原对象与新对象,将原数据读取至原对象,然后通过程序转换到新对象,将新对象重新保存在一个新文件(BIN)里面,最后原对象文件和原数据文件(BIN)删除。

4.实时保存,不建议实时保存,等所有处理完毕延迟保存数据最好。

但是如果你的应用很小,内存足够hold住数据,且不需要实时保存,那么此方法是可行的,而且可以说比用access都好,呵呵。

具体问题具体分析,合适就好。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。