1:缓存。

你需要了解大数据高并发的瓶颈在哪里,一般都是数据库层面的,机械硬盘承载不起非常快速的读写操作,cpu承载不起大量的逻辑运算,所以最基本的解决思路就是:
1.换固态硬盘加快硬盘的读写效率。
2.建立缓存中间件降低对硬盘的读写次数,缓存不用多说了,最最最基本和重要的优化策略。
3.将硬盘的读写或者数据的计算分摊到多台机器上,也就是集群。hadoop就是基于这个层面的。
4.良好的查询算法,降低读的次数,分表,分库,索引等都是基于这层面的。

理论上来讲,在带宽充裕的情况下,只要遵循上面的4个思路进行延伸就可以解决大部分的高并发问题。

1。整页缓存

<%@ OutputCache Duration="" VaryByParam="none" %>
Duration 设置缓存到期时间,单位:秒。
VaryByParam:可用来使缓存输出因查询字符串而异,多个查询字符用分号隔开。 1.2 当使用整页缓存时,可以根据页面url的不同参数来设置不同的 页面缓存 版本。
<%@ OutputCache  Duration="" VaryByParam="id" %>

mvc对应 原理是利用特性

 [OutputCache(Duration=)]

2 数据源缓存

  <asp:ObjectDataSource EnableCaching="true" CacheDuration="20" ID="ObjectDataSource1" runat="server" SelectMethod="GetList" TypeName="BLL.Classes"></asp:ObjectDataSource>

其中getList是方法 不过这个方式在企业一般不推荐 。至少个人一般不用控件

3:自定义缓存

List<MODEL.Classes> list=null;

            if (Cache["myDog"] == null)
{
Cache["myDog"] = new Dog() { StrName = "小瑞瑞", StrType = "柯基犬" };
Response.Write("保存了一只狗狗");
//查询数据库 存入缓存
list = new BLL.Classes().GetList();
Cache["list"] = list;
}
else
{
Dog myDog = Cache["myDog"] as Dog;
Response.Write("myDog="+myDog.StrName);
//从缓存里获取数据
list = Cache["list"] as List<MODEL.Classes>;
}
           myDog, list 就可以使用了

4.文件依赖项自定义缓存(新建一个文件 这里是txt)

            List<MODEL.Classes> list=null;

            if (Cache["list"] == null)
{
//查询数据库 存入缓存
list = new BLL.Classes().GetList();
//设置绝对过期时间
//Cache.Insert("list", list, null, DateTime.Now.AddSeconds(20),System.Web.Caching.Cache.NoSlidingExpiration);
//设置滑动过期时间
//Cache.Insert("list", list, null, System.Web.Caching.Cache.NoAbsoluteExpiration, new TimeSpan(10000));
//带 文件缓存依赖
string strPath = Server.MapPath("1.txt");
//文件缓存依赖项
System.Web.Caching.CacheDependency fileDep = new System.Web.Caching.CacheDependency(strPath);
//创建带文件依赖的缓存 键值项
Cache.Insert("list", list, fileDep, System.Web.Caching.Cache.NoAbsoluteExpiration, System.Web.Caching.Cache.NoSlidingExpiration); Response.Write("依赖文件被修改了,又重新读取数据列表存入缓存中了~~!"); }
else
{
//从缓存里获取数据
list = Cache["list"] as List<MODEL.Classes>;
}
使用缓存list

5:数据库缓存依赖

借用博客园的知识库

http://kb.cnblogs.com/page/69727/

10进制转换 16进制

int str = 20;
Console.WriteLine(str.ToString("X"));

c# 判断字符串是否包含数字

        static void Main(string[] args)
{
string str1 = "111a1";
var sss= IsInteger(str1);
Console.WriteLine(sss); ;
Console.Read(); } public static bool IsInteger(string s)
{
string pattern = @"^\d*$";
return Regex.IsMatch(s, pattern);
}

c#判断字符串数字 并取出

            string test = "方法.1";
int count = Regex.Matches(test, @"\d").Count;
Console.WriteLine("字符串中数字的个数为:{0}", count);
Console.WriteLine("连续整数分别为:");
MatchCollection mc = Regex.Matches(test, @"\d+");
foreach (Match m in mc)
{
Console.WriteLine(m.Value);
}

异或效验:

        public static string ConvertHexToXor2(string hex)
{
string xor = "";
for (int i = ; i < hex.Length; i += )
{
string str = hex.Substring(i, );
if (xor != "")
{
xor = (Convert.ToInt64(xor, ) ^ Convert.ToInt64(str, )).ToString("X2");
}
else
{
xor = str;
}
}
return xor;
} 优化修改
            //写校验码
stream.Position = 5;
byte value = (byte)stream.ReadByte();
while (stream.Position != stream.Length - 2)
{
value = (byte)(value ^ (byte)stream.ReadByte()); //校验码计算
}
stream.Position = stream.Length - 2; //设置流在 验证码开始位置
stream.WriteByte(value); //写验证码

  

 
        private DataView FillData(DataTable dt)
{
if (dt == null || dt.Rows.Count == )
{
return null;
}
#region ---此列groupTime已在数据库添加
//dt.Columns.Add("groupTime", typeof(DateTime));
//foreach (DataRow dr in dt.Rows)
//{
// dr["groupTime"] = DateTime.Parse(dr["Dyn_Time"].ToString()).ToString("yyyy-MM-dd");
//}
#region tempTimeSort 对时间排序否则每次运算结果有细微的变化 此方法等价于string.Join("#", m.Select(x => x.Field<DateTime>("Dyn_Time")).OrderBy(x => x)) 优化
//List<DateTime> tempTimeSort = null;
//tempTimeSort = new List<DateTime>();
//for (int k = 0; k < tempTimes.Length; k++)
//{
// tempTimeSort.Add(DateTime.Parse(tempTimes[k]));
//}
//tempTimeSort.Sort();
#endregion
#endregion #region 添加列分组 并统计运算
var dataList = from item in dt.AsEnumerable().AsParallel()
group item by new
{
dyn_vehid = item.Field<int>("dyn_vehid"),
groupTime = item.Field<string>("groupTime")
} into m
where m.Count() >
orderby m.Key.dyn_vehid descending
select new
{
dyn_vehid = m.Key.dyn_vehid,
dyn_Time = string.Join("#", m.Select(x => x.Field<DateTime>("Dyn_Time")).OrderBy(x => x)),
groupTime = m.Key.groupTime,
v_companyid = m.First().Field<int>("v_companyid")
}; var obcVhicle = new List<ClsVehicle>();
int sumSecond = ;
foreach (var item in dataList)
{
var tempTimes = item.dyn_Time.Split(new string[] { "#" }, StringSplitOptions.RemoveEmptyEntries);
for (int w = ; w < tempTimes.Length - ; w++)
{
var secondTemp = "".TimeSeconds(tempTimes[w], tempTimes[w + ]);
if (secondTemp < TxtdevicesInterval)
{
sumSecond += secondTemp;
}
}
double sums = double.Parse(sumSecond.ToString()) / ;
var v_noTemp = VehList.Where(y => y.iVId == item.dyn_vehid).ToList();
var vehicle = new ClsVehicle()
{
v_no = v_noTemp[].strVehNum,
dyn_vehid = item.dyn_vehid,
C_EnterpriseName = Company.Where(x => x.CompanyId == item.v_companyid).ToList()[].CompanyName,
Dyn_Time = (sums * ).ToString("F3") + "%",
V_LicenseColor = v_noTemp[].strVehNumColor,
groupTime = item.groupTime
};
sumSecond = ;
obcVhicle.Add(vehicle);
}
#endregion #region 数据源行合并
foreach (var g in obcVhicle.AsParallel().GroupBy(x => x.dyn_vehid))
{
var dataFist = g.First();
if (g.Count() > )
{
tempDt.Rows.Add(dataFist.C_EnterpriseName, dataFist.v_no, dataFist.V_LicenseColor, string.Join("#", g.Select(x => x.groupTime + "$" + x.Dyn_Time)), "", "", dataFist.dyn_vehid);
}
else
{
tempDt.Rows.Add(dataFist.C_EnterpriseName, dataFist.v_no, dataFist.V_LicenseColor, "", dataFist.groupTime, dataFist.Dyn_Time, dataFist.dyn_vehid);
}
}
#endregion #region 数据源行转换列有bug RemoveAt后索引改变 应该申明临时变量保存
//var isOne = false;
//for (int i = 0; i < obcVhicle.Count; i++)
//{
// for (int j = i + 1; j < obcVhicle.Count; j++)
// {
// if (obcVhicle[i].dyn_vehid == obcVhicle[j].dyn_vehid)
// {
// if (!isOne)
// {
// isOne = true;
// obcVhicle[i].groupTime += "#" + obcVhicle[i].Dyn_Time + "$" + obcVhicle[j].groupTime + "#" + obcVhicle[j].Dyn_Time;
// }
// else
// {
// obcVhicle[i].groupTime += "$" + obcVhicle[j].groupTime + "#" + obcVhicle[j].Dyn_Time;
// }
// obcVhicle.RemoveAt(j); ;
// }
// }
// isOne = false;
//}
#endregion #region 构建dtList 并赋值
if (resultDtList == null || tempDt == null)
{
Thread.Sleep();
}
for (int k = ; k < tempDt.Rows.Count; k++)
{
DataRow row = resultDtList.NewRow();
row[] = tempDt.Rows[k][];
row[] = tempDt.Rows[k][];
row[] = tempDt.Rows[k][];
row[] = int.Parse(tempDt.Rows[k][].ToString());
string[] strValues =null;
var tempArr = tempDt.Rows[k]["result"].ToString();
if (!string.IsNullOrEmpty(tempArr))
{
strValues = tempArr.Split('#');
}
//!= null说明有多条
if (strValues != null)
{
for (int sp = ; sp < strValues.Length; sp++)
{
var strValue = strValues[sp].Split('$');
if (strValue.Length == )
{
row[strValue[] + "在线率"] = strValue[];
}
}
resultDtList.Rows.Add(row);
}
else
{ //只有一条数据
var tempClomn = tempDt.Rows[k][];
row[tempClomn + "在线率"] = tempDt.Rows[k][];
resultDtList.Rows.Add(row);
}
}
#endregion #region 处理数据源 dtList排序注意dyn_vehid为lnt类型 dt没空的默认赋值0
DataView dv = resultDtList.DefaultView;
dv.Sort = "dyn_vehid DESC"; DataTable dtTemp = dv.ToTable();
dtTemp.Columns.Remove("dyn_vehid"); int cols = dtTemp.Columns.Count;
int rows = dtTemp.Rows.Count;
for (int xp = ; xp < rows; xp++)
{
for (int xps = ; xps < cols; xps++)
{
if (string.IsNullOrEmpty(dtTemp.Rows[xp][xps].ToString()) || dtTemp.Rows[xp][xps] == null)
{
dtTemp.Rows[xp][xps] = "";
}
}
}
#endregion
return dtTemp.DefaultView;
}

一般处理程序获取post参数失败

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using SMS.Common; namespace SMS.FileUpload
{
/// <summary>
/// FileUpload 的摘要说明
/// </summary>
public class FileUpload : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
context.Response.Buffer = true;
context.Response.ExpiresAbsolute = DateTime.Now.AddSeconds();
context.Response.AddHeader("Pragma", "No-Cache");
context.Response.Expires = ;
//context.Response.ContentType = "text/plain";
//context.Response.Charset = "utf-8"; string action = context.Request["action"]; //获取操作类型
switch (action)
{
default: ResponseFileUpload(context); break;
}
} private void ResponseFileUpload(HttpContext context)
{
var path = "";
var fileName = "";
FileStream fstream = null;
try
{
StreamReader stw = new StreamReader(HttpContext.Current.Request.InputStream);
string PostData = stw.ReadToEnd(); var p = DynamicJson.Parse(PostData.ToString()); var content = p.Content;
// fileName = p.Name; //var content =context.Request["Content"];
//fileName = context.Request["Name"];
string[] Extension = p.Name.Split('.'); fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + "." + Extension[]; path = HttpContext.Current.Server.MapPath(string.Format("../UserFile/{0}", DateTime.Now.ToString("yyyyMMdd")));
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
if (content!=null)
{
byte[] imageBytes = Convert.FromBase64String(content);
fstream = File.Create(path +"/"+ fileName, imageBytes.Length);
fstream.Write(imageBytes, , imageBytes.Length);
fstream.Close();
}
ResponseMsg(context, string.Format("UserFile/{0}/{1}", DateTime.Now.ToString("yyyyMMdd"), fileName));
}
catch
{
context.Response.Write("{ \"result\":-1}");
fstream.Close();
}
} public void ResponseMsg(HttpContext context, string path)
{
context.Response.Write("{ \"result\":\"" + path + "\"}");
} public bool IsReusable
{
get
{
return false;
}
}
}
}

c#缓存 笔记的更多相关文章

  1. golang实现分布式缓存笔记(一)基于http的缓存服务

    目录 前言 cache 缓存服务接口 cache包实现 golang http包使用介绍 hello.go Redirect.go http-cache-server 实现 cacheHandler ...

  2. smarty之缓存笔记

    smarty缓存技术 在smarty中,缓存分为:普通缓存,单模版都缓存,局部缓存. 缓存:1:首选打开缓存配置项:$smarty->caching=true; 2:缓存生命周期的配置选项:$s ...

  3. .net4缓存笔记

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  4. SQL 笔记 By 华仔

    -------------------------------------读书笔记------------------------------- 笔记1-徐 最常用的几种备份方法 笔记2-徐 收缩数据 ...

  5. 分享一下我研究SQLSERVER以来收集的笔记

    分享一下我研究SQLSERVER以来收集的笔记 前言 为什麽分享??因为像现在网上很多人攻城师那样,转行去卖水果,卖早餐,总有一日我也会离开这个行业的 由于本人不是在大公司上班工资很低,我希望有一天存 ...

  6. MVC缓存OutPutCache学习笔记 (二) 缓存及时化VaryByCustom

    <MVC缓存OutPutCache学习笔记 (一) 参数配置> 本篇来介绍如何使用 VaryByCustom参数来实现缓存的及时化.. 根据数据改变来及时使客户端缓存过期并更新.. 首先更 ...

  7. MVC缓存OutPutCache学习笔记 (一) 参数配置

    OutPutCache 参数详解 Duration : 缓存时间,以秒为单位,这个除非你的Location=None,可以不添加此属性,其余时候都是必须的. Location : 缓存放置的位置; 该 ...

  8. [原创]java WEB学习笔记93:Hibernate学习之路---Hibernate 缓存介绍,缓存级别,使用二级缓存的情况,二级缓存的架构集合缓存,二级缓存的并发策略,实现步骤,集合缓存,查询缓存,时间戳缓存

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  9. PHP 开发 APP 接口 学习笔记与总结 - Redis 缓存

    Redis 可以定期将数据备份到磁盘中(持久化),同时不仅仅支持简单的key/value 类型的数据,同时还提供list,set,hash等数据结构的存储:Memcache 只是简单的key/valu ...

随机推荐

  1. commons-pool实战之 GenericObjectPool和GenericKeyedObjectPool

    前面两篇文章说了怎么样简单的使用commons-pool库,这里需要考虑一个问题就是在很多时候我们在池里的对象都是比较重型的并且大多数比较稀缺的 资源,比如说数据库连接,这样如果一直把一些连接放在池里 ...

  2. php之thinkphp部署Linux

    今天在学习thinkphp时遇到很多的问题,为了能够更好的学习今天抽出下午时间,对lamp环境下的开发进行了一些尝试,毕竟以前做过很多与Linux相关的工作,再加上php本身最优的搭配就是lamp环境 ...

  3. Memcached基础知识

    主要内容: Memcached基本的工作原理 Memcached的两阶段哈希 Memcached的数据存储方式 Memcached新建Item分配内存过程 Memcached的数据过期方式 Memca ...

  4. C语言中的EOF和回车不一样

    经常我们碰到这样一个C语言问题,例如: 输入一个组整数,按照从小到大排序后输出结果 输入:  1 7 9 2 4 输出:  1 2 4 7 9 这里要用C语言读入一段数的话,如果用 int array ...

  5. python文件I/O(转)

    Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你 ...

  6. iOS: ARC & MRC下string内存管理策略探究

    ARC & MRC下string内存管理策略探究 前两天跟同事争论一个关于NSString执行copy操作以后是否会发生变化,两个人整了半天,最后写代码验证了一下,发现原来NSString操作 ...

  7. AlwaysOn可用性组测试环境安装与配置(二)--AlwaysOn配置(界面与T-SQL)

    四.AlwaysOn配置 1.开启AlwaysOn高可用性功能. 1.1.开启Server01的可用性组 1.2.需要重启服务:属于SQL server群集节点的服务,需要通过故障转移界面重启 1.3 ...

  8. Ruby类的继承

    Ruby继承的语法 class DerivedClass < BaseClass #some stuff end < 为继承符号 重写(override) 的概念 有时, 我们希望子类从父 ...

  9. js做灯泡明灭特效

    W3school中的js专讲这一块 http://www.w3school.com.cn/tiy/t.asp?f=js_lightbulb

  10. Jcrop+uploadify+php实现上传头像预览裁剪

    最近由于项目需要,所以做了一个上传头像预览并且可以预览裁剪的功能,大概思路是上传的图片先保存到服务器,然后通过ajax从服务器获取到图片信息,再利用Jcrop插件进行裁剪,之后通过PHP获取到的四个裁 ...