我们有一个针对.NET 4.0编写的应用程序,它在周末崩溃,将以下消息放入事件日志中:
应用程序:PnrRetrieverService.exe Framework版本:v4.0.30319
描述:由于.NET运行时在IP 791F9AAA(79140000)处出现内部错误而导致进程终止,退出代码为80131506.
这是在Windows Server 2003 R2标准版框中.谷歌搜索这个错误没有发现任何相关的.例如,这不是在VS Studio中发生的,而是在生产框中发生; 当服务最终重新启动时,它没有遇到任何进一步的问题.
如何诊断.NET运行时中的错误?
以下代码应抛出异常以防止添加重复的集合项.
ICollection<T> collection = new List<T>();
public void Add(T item)
{
if (collection.Contain(item))
{
throw new SomeExceptionType()
}
collection.Add(item);
}
Run Code Online (Sandbox Code Playgroud)
什么标准异常类型最合适?
我在使用.NET编写的代码中遇到了问题.
问题是在某个地方我有一些狡猾的数据库代码,这意味着一段时间后我得到以下错误:
超时已过期.从池中获取连接之前经过的超时时间.这可能是因为所有池连接都在使用中并且达到了最大池大小.
我知道这是因为某个地方我没有处理过我的一个datareader或类似的东西,这意味着它仍然打开了连接,因此它不会被返回到池中.我在我的代码中发现这种情况时遇到了一些问题.
所以我的问题:
有没有办法查询连接池,以找出它正在使用的连接正在做什么.我只是想找到一种方法来查找正在运行的查询以允许我找到有问题的代码片段.
对于它的价值,我没有权限在相关数据库上运行活动监视器以找出这种方式.
我正在使用dapper来进行一些oracle访问.我有一个场景,我必须有一个类型为OracleDbType.Clob的输出参数.当我使用dapper并因此使用基本DbType枚举时,我正在使用此处建议的DbType.Object枚举http://docs.oracle.com/html/B14164_01/featOraCommand.htm代表OracleDbType.Clob.
但是,这会将命令参数(深入到dapper中)设置为DbType对象和oracle类型Blob(因为DbConnection提供者是具体的OracleParameter).如果此参数的类型为Clob而不是Blob,则此Oracle proc仅会起作用.
纯ADO代码就像一个魅力(使用OracleParameter和OracleConnection等),但似乎没有办法在dapper中设置具体类型或钩子进入这个DbParameter创建过程,以便在返回的CommandParameter上更改此OracleType?
这有效:
using (OracleConnection conn = new OracleConnection("some connection string"))
{
conn.Open();
var cmd = new OracleCommand("ProcName", conn);
cmd.CommandType = CommandType.StoredProcedure;
var paramOne = new OracleParameter("ReturnValue", OracleDbType.Clob, int.MaxValue, null, ParameterDirection.Output);
cmd.Parameters.Add(paramOne);
cmd.ExecuteNonQuery();
var value1 = paramOne.Value;
}
Run Code Online (Sandbox Code Playgroud)
这失败了:
DynamicParameters dyanmicParameters = new DynamicParameters();
dyanmicParameters.Add("ReturnValue", null, DbType.Object, ParameterDirection.Output);
connection.Execute("ProcName", dyanmicParameters, commandType: CommandType.StoredProcedure);
var val = dynamicParameters.Get<object>("ReturnValue");
Run Code Online (Sandbox Code Playgroud)
有任何想法吗??
谢谢,
乔恩
仍然习惯了Entity框架,但我已经看到了类似下面的代码,他们在Entity中拥有id的私有setter.
public int Id { get; private set; }
public string FirstName { get; set; }
public string LastName { get; set; }
Run Code Online (Sandbox Code Playgroud)
为什么有些人会有私人制定者.这个Id字段无论如何都是在数据库中自动生成的,这是因为它设置为私有?
另外,为什么我们需要私有构造函数和公共构造函数,如下所示?
private Emp() { }
public Emp(string name, string lastname)
{
FirstName = firstname;
LastName = lastname;
}
Run Code Online (Sandbox Code Playgroud) Visual Studio中有用的加载项(Resharper,StyleCop等)是否可以加速您的工作?或者工具需要太多资源,您必须等到每个加载项完成执行?
[更新]:顺便提一下,有人注意到IDE + Resharper的性能是否更适合包含网站或Web应用程序的解决方案?
我通过互联网阅读了很多类似主题的文章和答案,但没有找到我的问题的原因.
我有一台.NET 4 Windows服务连接到同一台机器上的SQL Server Express.生产中只有一次碰巧看到以下错误:
"已成功与服务器建立连接,但在登录过程中发生错误.(提供程序:命名管道提供程序,错误:0 - 管道的另一端没有进程.)".
如果我们使用命名管道协议,则出现此错误的原因很明显,因为我们尚未在服务器上启用它们.但我的问题是为什么命名管道协议可以在这里使用?在连接字符串中,我们使用了" Data Source =.\ SQLEXPRESS ".考虑到msdn和互联网上的信息,我的理解是当"." 总是使用"共享内存协议"必须使用.那么必须发生什么才能使ADO.NET SqlClient决定使用命名管道协议呢?
大多数时候一切都工作得很好,但我需要知道这个过程,以便我们可以在需要时防止此类错误.
提前谢谢,托多尔
我的公司拥有100个数据库,包含数千个实体,包括表格,SP和视图.
我正在使用Entity Framework 6为我公司的临时项目创建一个通用数据层,这样开发人员就不必为底层数据库烦恼了.
我的项目包含空数据模型(.edmx).
现在根据用户选择我需要设置连接并在运行时获取实体.一旦注册了这些实体,我就需要向调用者提供一组数据.
例如:开发人员从我的类调用方法并将实体名称作为枚举字符串传递.say ..."Entity.Orders"
这里..我的代码知道"Orders"属于名为"Sales"的数据库,它位于"SalesBox"服务器上.
我的代码现在设置与"Sales"数据库的连接,从"Order"表中获取行,创建List集合(或任何适当的)并将集合返回给调用者.
使用EF 6可以实现这一切吗?如果是的如何?
IDE配置:
Visual Studio 2008 + Resharper 4.5.1 + Agent Smith 1.1.8.最后一个加载项没有任何复杂的配置.
方案说明:
33个类库+ 200多页的网站.
症状:在Resharper上调整一小时后,IDE开始抛出OutOfMemoryExection异常.正常工作是不可能的,只有重新打开Visual Studio才能提供帮助.
有没有人有这样的问题?是否可以配置Resharper以减少内存消耗?什么Resharper功能消耗最多的内存?
c# ×5
.net ×4
ado.net ×3
resharper ×2
sql-server ×2
add-in ×1
constructor ×1
dapper ×1
debugging ×1
duplicates ×1
exception ×1
generics ×1
oracle ×1
performance ×1
setter ×1
sql ×1