近日在想用Remoting传输文件,用户在400以上.以下是服务端读取文件的方法,发现占用CPU随用户的增多而增多,在公司内部测试6-7个人就占用70%左右,不知道有什么好的解决方案 /// <summary>
///
/// </summary>
/// <param name="octet">客户端数组</param>
/// <param name="offset">文件开始处</param>
/// <param name="Count">数组大小</param>
/// <returns></returns>
public int GetByte(out byte[] octet, long offset)
{
int ReadByte = 0;
using (FileStream fs = new FileStream(Route, FileMode.Open,FileAccess.Read))
{
octet = new byte[Speed];
try
{
fs.Seek(offset, SeekOrigin.Current);
BufferedStream inStream = new BufferedStream(fs);
ReadByte = inStream.Read(octet, 0, Speed);
inStream.Close();
}
catch (Exception)
{
return -1;
}
}
return ReadByte;
}
#endregion
///
/// </summary>
/// <param name="octet">客户端数组</param>
/// <param name="offset">文件开始处</param>
/// <param name="Count">数组大小</param>
/// <returns></returns>
public int GetByte(out byte[] octet, long offset)
{
int ReadByte = 0;
using (FileStream fs = new FileStream(Route, FileMode.Open,FileAccess.Read))
{
octet = new byte[Speed];
try
{
fs.Seek(offset, SeekOrigin.Current);
BufferedStream inStream = new BufferedStream(fs);
ReadByte = inStream.Read(octet, 0, Speed);
inStream.Close();
}
catch (Exception)
{
return -1;
}
}
return ReadByte;
}
#endregion
解决方案 »
- C#读写内存也不差!(发布C#编写的<植物大战僵尸>作弊器源码)
- 这行VB代码转换成C#后报错,请指导
- 升级DLL后报错
- 请帮忙解释一下这个C#程序!
- 为什么我的网页头骨加了<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- 注释代码!
- 如何用C#在程序中动态的增加控件
- 正则表达式
- c#建立opcClient与opc服务器通讯异步读写变量,出现“拒绝访问”
- 有个广播站,想实现其广播内容在网上在线播放,如何做?
- 343928439*394293 分成2个数字!
- winform打印问题
可否直接读到内在,做为一个内存流来操作.可以不用每次都IO操作.
==========================
有没有Socket例子给我参考下
在MSDN上和我的博客里都有,但我博客里面的例子不是很完整的。你可以去看看!
意思是说:
把文件一次性读到内存里面.以后直接从内存里读取想相要的数据就可以了.
private void GetFileData(string asPath)
{
string sPath = asPath ; StreamReader sr = new StreamReader(sPath);
poData = Encoding.Default.GetBytes(sr.ReadToEnd());
sr.Close();
}
public int GetByte(out byte[] octet, long offset)
{
int ReadByte = 0;
using (MemoryStream fs = new MemoryStream(poData, 0, poData.Length, false, false))
{
octet = new byte[Speed];
try
{
fs.Seek(offset, SeekOrigin.Current);
BufferedStream inStream = new BufferedStream(fs);
ReadByte = inStream.Read(octet, 0, Speed);
inStream.Close();
}
catch (Exception)
{
return -1;
}
}
return ReadByte;
}
文件不止一个,1-2千G的文件 哪有那么大的内存啊
-------------------------------------------------------------------------
也难怪为这么占CPU啊.
fs.Seek(offset, SeekOrigin.Current);
这一句就要CPU找半年.
晕....
这个占用很多CPU吗? 我认为占用CPU的在读文件那块