当前位置:  编程技术>.net/c#/asp.net
本页文章导读:
    ▪使用EntityFramework访问数据时的一些效率问题      一、准备工作  1、数据库模型:  如你所见,EF模型是上图中三个表,第四个则是数据库视图。  2、数据:  先在HeadAddress表中插入三条数据,再在EndAddress表中也插入三条数据,最.........
    ▪C#各种数据库连接字符串大全——SQLServer、Oracle、Access           刚开始学习C#开发项目时,长期会为了写一个安全的高效的数据库连接发愁。我发现现在很多刚开始学习的朋友和有些做了一两年的朋友,也有点犯愁,我就贴上这个代码,.........
    ▪C#委托之多播委托( 二)      通过一个委托调用多个方法可能导致一个大问题,多播委托包含一个逐个调用的委托集合,如果通过委托调用的其中一个方法抛出一个异常,整个迭代就会停止示例如下:static void One(){ Con.........

[1]使用EntityFramework访问数据时的一些效率问题
    来源:    发布时间: 2013-10-22

一、准备工作

  1、数据库模型:

  如你所见,EF模型是上图中三个表,第四个则是数据库视图。

  2、数据:

  先在HeadAddress表中插入三条数据,再在EndAddress表中也插入三条数据,最后往Customer表中插入三万条随机数据作为测试数据。

二、效率比较

  1、视图 vs 跨表:遍历所有用户信息(HeadAddress、EndAddress、Customer中的字段)

1 // 视图(ToList)
2 var temp = _DataContext.CustomerView.ToList();
3 foreach (var item in temp) ;
4 // 跨表(ToList)
5 var temp = _DataContext.CustomerSet.Select(c => new
6 {
7 Name = c.Name,
8 Sex = c.Sex,
9 Street = c.EndAddress.Street,
10 Number = c.EndAddress.Number,
11 Province = c.EndAddress.HeadAddress.Province,
12 City = c.EndAddress.HeadAddress.City,
13 County = c.EndAddress.HeadAddress.County
14 }).ToList();
15 foreach (var item in temp) ;

  结果:

  

  在接下来的所有统计中,我都没有把第1次(即上图中的0次)的时间算在平均时间内(因为EF第一次访问有初始时间)。可见使用视图做遍历效果并没有提升,但是当我把测试代码改为:

1 // 视图(ToList)
2 var temp = _DataContext.CustomerView.ToList();
3 foreach (var item in temp) ;
4 // 跨表(ToList)
5 var temp = _DataContext.CustomerSet.Select(c => new
6 {
7 Name = c.Name,
8 Sex = c.Sex,
9 Street = c.EndAddress.Street,
10 Number = c.EndAddress.Number,
11 Province = c.EndAddress.HeadAddress.Province,
12 City = c.EndAddress.HeadAddress.City,
13 County = c.EndAddress.HeadAddress.County
14 }).ToList();

  时,我发现效率发生了明显改变:

  我们看到,视图ToList所用时间与上次相比几乎一致,甚至还有缩短,而使用跨表查找然后ToList耗时大大增加。至于原因,我认为可能是视图的ToList结果在数据结构内部为我们节省了非常多的工作。

  2、视图 vs 跨表:遍历省份是“湖北”的用户信息(HeadAddress、EndAddress、Customer中的字段)  

1 // 视图
2 var temp = _DataContext.CustomerView.Where(c => c.Province == "湖北");
3 foreach (var item in temp) ;
4 // 跨表
5 var temp = _DataContext.CustomerSet.Where(c => c.EndAddress.HeadAddress.Province == "湖北")
6 .Select(c => new
7 {
8 Name = c.Name,
9 Sex = c.Sex,
10 Street = c.EndAddress.Street,

    
[2]C#各种数据库连接字符串大全——SQLServer、Oracle、Access
    来源:    发布时间: 2013-10-22

     刚开始学习C#开发项目时,长期会为了写一个安全的高效的数据库连接发愁。我发现现在很多刚开始学习的朋友和有些做了一两年的朋友,也有点犯愁,我就贴上这个代码,给自己以后做个参考,也给朋友做个学习的参考。
     我主要在这里统计了.NET项目下常用的数据库连接字符串:SQLServer、Oracle、Access三种数据库(MySql、SQLLite、Excel、HTML Table等等暂不列入)。

1.常用连接字符串参数说明
如需查看详细说明请参见:
SqlConnection.Connectionstring
OracleConnection.ConnectionString
OleDbConnection.ConnectionString

关键字默认描述 Server 或 Data Source N/A要连接的数据库实例的名称或网络地址(可以在名称后指定端口号),指定本地实例可用(Local),如果是SqlExpress(名称\SqlExpress)。 Initial Catalog 或 Database N/A数据库的名称。 User ID 或 UID N/A登录帐户。 Password 或 Pwd N/A帐户登录的密码。 Persist Security Info 'false'当该值设置为 false 或 no(强烈推荐)时,如果连接是打开的或者一直处于打开状态,那么安全敏感信息(如密码)将不会作为连接的一部分返回。重置连接字符串将重置包括密码在内的所有连接字符串值。可识别的值为 true、false、yes 和 no。 Enlist 'false'true 表明连接池程序在创建线程的当前事务上下文中自动登记连接。可识别的值为 true、false、yes 和 no。 Connection Lifetime 0当连接被返回到池时,将其创建时间与当前时间作比较,如果时间长度(以秒为单位)超出了由 Connection Lifetime 指定的值,该连接就会被销毁。这在聚集配置中很有用(用于强制执行运行中的服务器和刚置于联机状态的服务器之间的负载平衡)。零 (0) 值将使池连接具有最大的连接超时。 Max Pool Size 100池中允许的最大连接数。 Min Pool Size 0池中允许的最小连接数。 Pooling 'true'当该值为 true 时,系统将从适当的池中提取 DbConnection 对象,或在需要时创建该对象并将其添加到适当的池中。可识别的值为 true、false、yes 和 no。 Packet Size 8192用来与 SQL Server 的实例进行通信的网络数据包的大小,以字节为单位。 AttachDBFilename 或 extended properties 或 Initial File Name N/A主数据库文件的名称,包括可连接数据库的完整路径名。只有具有 .mdf 扩展名的主数据文件才支持 AttachDBFilename。
如果主数据文件为只读,则附加操作将失败。
该路经可以是绝对路径,也可以是相对路径,这取决于是否使用 DataDirectory 替换字符串。如果使用 DataDirectory,则对应的数据库文件必须存在于替换字符串指向的目录的子目录中。
备注:远程服务器、HTTP 及 UNC 路径名不受支持。
实例:必须按照如下方式使用关键字“database”(或其别名之一)指定数据库名称:
"AttachDbFileName=|DataDirectory|\data\YourDB.mdf;integrated security=true;database=YourDatabase"
如果数据文件所在的目录中存在日志文件,并且在附加主数据文件时使用了“database”关键字,则会生成错误。这种情况下,请移除日志文件。附加了数据库后,系统将根据物理路径自动生成一个新的日志文件。 Integrated Security 或 Trusted_Connection 'false'当为 false 时,将在连接中指定用户 ID 和密码。当为 true 时,将使用当前的 Windows 帐户凭据进行身份验证。可识别的值为 true、false、yes、no 以及与 true 等效的 sspi(强烈推荐)。

2.常用连接字符串实例
如需查看更多实例请参见:各种连接字符串实例

SQLServer简易连接:
Server=服务器地址;Database=数据库名称;User Id=用户名;Password=密码;

SQLServer本地文件可信连接:
Server=.\SQLExpress;AttachDbFilename=|DataDirectory|mydbfile.mdf;Database=数据库名称;Trusted_Connection=sspi;

SqlServer自定义连接:
Data Source=(LOCAL);Initial Catalog=数据库名称;User ID=用户名;Password=密码;Persist Security Info=True;Enlist=true;Max Pool Size=300;Min Pool Size=0;Connection Lifetime=300;Packet Size=1000;

Oracle简易连接:
Data Source=orclsid_127.0.0.1;User Id=用户名;Password=密码;
//这个数据源是从Oracle的安装目录下tnsnames.ora文件中去找的。而并非是在系统的“管理工具”下的“数据源(ODBC)”中找。这个tnsnames.ora文件是在Oracle的安装目下的“client_1/network/admin/”下。

Oracle自定义连接:
Server=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=服务器地址)(PORT=端口号)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=数据库名称)));User Id=用户名;Password=密码;Persist Security Info=True;Enlist=true;Max Pool Size=300;Min Pool Size=0;Connection Lifetime=300;

Access简易连接:
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;User Id=用户名;Password=密码;
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb;Jet OLEDB:Database Password=密码;

我仅罗列出了一些常用的连接字符串实例和参数说明。我原本是准备根据每种数据库来分别详细的阐述连接字符串的实例和参数说明,后来没有这么做,因为这篇帖子主要是为了满足刚开始学习的朋友的需求,因为基本能适应大部分项目需要了。如果是需求,并发数很高的项目,则需要自行对项目、数据库、服务器等等进行优化和改造,在这里就不详细阐述了。

本文链接


    
[3]C#委托之多播委托( 二)
    来源:    发布时间: 2013-10-22

通过一个委托调用多个方法可能导致一个大问题,多播委托包含一个逐个调用的委托集合,如果通过委托调用的其中一个方法抛出一个异常,整个迭代就会停止

示例如下:

static void One()
{
Console.WriteLine("One");
throw new Exception(" Error in one");
}

static void Two()
{
Console.WriteLine("Two");
}

Action d1 = One;
d1 += Two;
try
{
d1();
}
catch (Exception)
{
Console.WriteLine("Exception caught");
}

委托只调用了第一个方法,因为第一个方法抛出了一个异常,所以委托的迭代会停止,不再调用Two()方法,结果:

One

Exception caught

为了避免这个问题,应自己迭代方法列表,Delegate类定义的GetInvocationList()方法,它返回一个Delegate对象数组,现在可以使用这个委托调用与委托直接相关的方法,

捕获异常,并继续下一次迭代

Action d1 = One;
d1 += Two;

Delegate[] delegates = d1.GetInvocationList();
foreach (Action item in delegates)
{
try
{
item();
}
catch (Exception)
{
Console.WriteLine("Exception caught");
}
}

结果如下:

One

Exception caught

Two

 

本文链接


    
最新技术文章:
▪C#通过IComparable实现ListT.sort()排序
▪C#实现对Json字符串处理实例
▪Winform实现抓取web页面内容的方法
▪Winform实现将网页生成图片的方法
▪C#控制台程序中处理2个关闭事件的代码实例
▪WinForm实现同时让两个窗体有激活效果的特效...
▪WinForm实现拦截窗体上各个部位的点击特效实...
▪用C#的params关键字实现方法形参个数可变示例
▪C#判断某程序是否运行的方法
▪C#验证码识别基础方法实例分析
▪C#通过WIN32 API实现嵌入程序窗体
▪C#实现获取鼠标句柄的方法
▪C#事件处理和委托event delegate实例简述
▪C#获取程序文件相关信息的方法
▪C#中的除法运算符与VB.NET中的除法运算符
▪ASP.NET MVC 5使用X.PagedList.Mvc进行分页教程(PagedLi...
▪Base64编码解码原理及C#编程实例
c/c++ iis7站长之家
▪C#和SQL实现的字符串相似度计算代码分享
▪C#使用Word中的内置对话框实例
▪C#反射之基础应用实例总结
▪C#生成单页静态页简单实例
▪C#实现SMTP邮件发送程序实例
▪C#实现随鼠标移动窗体实例
▪C#使用GDI+创建缩略图实例
▪C#实现通过模板自动创建Word文档的方法
▪C#中Response.Write常见问题汇总
▪C#中多态、重载、重写区别分析
▪WinFrom中label背景透明的实现方法
▪C#中out保留字用法实例分析
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3