1.文件内容为一行一行不断增加的字符串。
2.有两个进程,A进程定时给文件尾追加字符串,B进程定时读取文件头的字符串
3.B进程读取完以后删除该行字符串
4.设立该缓存文件的目的是B进程不能正常读取字符串时,字符串可以一直保留,等B进程正常运行以后继续读取。
5.该缓存文件会很大(1M--10G左右),不能全部读出,操作完以后重新写一遍,只能按位置读写原文件。
请问有什么好的实现方法?
2.有两个进程,A进程定时给文件尾追加字符串,B进程定时读取文件头的字符串
3.B进程读取完以后删除该行字符串
4.设立该缓存文件的目的是B进程不能正常读取字符串时,字符串可以一直保留,等B进程正常运行以后继续读取。
5.该缓存文件会很大(1M--10G左右),不能全部读出,操作完以后重新写一遍,只能按位置读写原文件。
请问有什么好的实现方法?
{
private AccountAccessInfo Info;
private IList<AccountAccessInfo> infoList; //数据缓存
public accessInfo()
{
Info = null;
infoList = new List<AccountAccessInfo>();
} /// <summary>
/// 缓存中的记录数量
/// </summary>
public int coun
{
get
{
return infoList.Count;
}
} /// <summary>
/// 缓存中的记录
/// </summary>
public AccountAccessInfo accountAccessInfo
{
get {
return Info;
}
} /// <summary>
/// 读取数据
/// </summary>
/// <returns></returns>
public bool read()
{
bool bo;
lock (infoList)
{
if (infoList.Count > 0)
{
Info = infoList[0];
infoList.RemoveAt(0);
bo = true;
}
else
{
Info = null;
bo = false;
}
}
return bo;
} /// <summary>
/// 将数据写入缓存中
/// </summary>
/// <param name="info">数据的实体类</param>
public void write(AccountAccessInfo info)
{
lock (infoList)
{
infoList.Add(info);
}
} } /// <summary>
/// 客户接入信息的实体类
/// </summary>
[Serializable]
public class AccountAccessInfo
{
private string sBindingsAdd;
private string sBindingsPort;
/// <summary>
/// 客户接入信息的实体类的构造函数
/// </summary>
/// <param name="BindingsAdd">绑定地址</param>
/// <param name="BindingsPort">绑定端口</param>
public AccountAccessInfo(string BindingsAdd, string BindingsPort)
{
sBindingsAdd = BindingsAdd;
sBindingsPort = BindingsPort;
} /// <summary>
///
/// 绑定地址
/// </summary>
public string bindingsAdd
{
get { return sBindingsAdd; }
}
/// <summary>
/// 绑定端口
/// </summary>
public string bindingsPort
{
get { return sBindingsPort; }
}
}
使用示例 accessInfo myacc = new accessInfo();
AccountAccessInfo info = new AccountAccessInfo("abc", "bcd");
myacc.write(info);
myacc.write(info);
myacc.write(info);
while (myacc.read())
textBox1.Text += myacc.accountAccessInfo.bindingsAdd+"\r\n";
数据结构方式写错了,确实是先进先出。
已经经过测试,数据库(MSSqlServer2005Express)方式速度慢,不能采用,MSMQ部署时有困难,且增加了系统故障点
毕竟文件方式简单直观,我们现在的主要困难是,怎么在B进程读完缓存文件头某行字符串时把这行删掉?
我们怎么告诉操作系统该缓存文件的文件头已经移到下一行,并且释放已读取过的空间?