我可以使用一些帮助来尝试跟踪我在ASP.Net项目中遇到的间歇性错误已经有一段时间了.
在构建解决方案时间歇性地,构建将失败并显示错误"/:Build(web):对象引用未设置为对象的实例." 该错误没有关联的文件,行,列或项目信息.关于错误的奇怪之处在于它会在连续重建时消失,并且似乎不会导致我们在构建成功后遇到的任何运行时错误.有时错误只会弹出一次,有时会发生3-4次,但最终构建会成功完成,然后似乎每次构建都很好.我无法确定何时以及何时会发生错误的模式,并且因为它总是最终构建它对我们来说并不是一个关键问题.只是一个烦恼.但是我想要的一个原因显而易见.
我想我应该补充一点,这是一个最初在ASP.net 1.1中开发并转换为2.0的应用程序,之后我继续在某个地方继续使用它,所以我不知道问题最初何时浮出水面.就这里的每个人而言,它始终存在.
显然,我不希望有人找出问题的原因,因为这需要他们查看我们的整个解决方案以找出潜在的问题.只是希望有人可以给我一些关于如何在代码中追踪错误的实际来源的新想法.它必须来自某个地方,对吧?你怎么去找到哪里?
今天遇到了这个错误.想知道是否有人能告诉我这意味着什么:
无法对大小为9522的行进行排序,这大于允许的最大值8094.
那是8094字节吗?人物?场?加入多个超出某些限制的表是一个问题吗?
在我的工作中,我有一个由我负责的六个Windows服务,用C#2003编写.每个服务都包含一个计时器,每分钟都会触发,大部分工作都在这里发生.
我的问题是,随着这些服务的运行,它们开始在循环的每次迭代中消耗越来越多的CPU时间,即使它们没有有意义的工作要做(即,它们只是闲置,查看数据库)做某事).当它们启动时,每个服务使用4个CPU的平均(约)2-3%,这很好.24小时后,每个服务将在其循环运行期间消耗整个处理器.
有人可以帮忙吗?我不知道是什么导致了这一点.我们当前的解决方案是每天重启一次服务(他们关闭自己,然后脚本看到他们离线并在凌晨3点重新启动它们).但这不是一个长期的解决方案; 我担心的是,随着服务变得越来越繁忙,每天重启一次可能还不够......但是因为它们有更大的启动惩罚(它们都使用NHibernate进行数据访问),因为它们变得更加繁忙,正是我们没有想要做的是更频繁地重新启动它们.
@akmad:没错,这很难.
很好的建议,但请放心,我们已经尝试了所有常见的故障排除.我希望这是一个有人可能知道的.NET问题,我们可以解决这个问题.我的老板的解决方案(我强调不想实现)是在数据库中放置一个字段,该字段保存多次,以便服务在白天重新启动,这样他就可以解决问题而不去考虑它.我正在拼命寻找真正问题的原因,以便我能解决它,因为这个解决方案将在大约六个月内成为灾难.
@Yaakov Ellis:他们每个人都有不同的功能.一个人从异地的某个地方读取Oracle数据库中的记录; 另一个处理这些记录并将属于这些记录的文件传输到我们的系统; 第三个检查这些文件,以确保它们是我们期望的那样; 另一种是维护服务,它不断检查磁盘空间(我们已经足够)等内容并轮询其他服务器以确保它们存活; 一个正在运行,只是为了确保所有其他正在运行并执行其工作,监视和报告错误,并重新启动任何无法保持整个系统一天24小时运行的任何事情.
所以,如果你问我认为你在问什么,不,所有这些服务都没有一个共同点(除了通过NHibernate访问数据库),我可以指出这是一个潜在的问题.不幸的是,如果事实证明这是实际问题(这不会让我感到惊讶),整个事情可能会被搞砸 - 我最终会用简单的SQL重写所有这些问题.我希望这是一个垃圾收集器问题或者比NHibernate更容易处理的东西.
@Joshdan:不是秘密.正如我所说,我们已经尝试了所有常见的故障排除.分析是无益的:我们使用的分析器无法指向CPU使用率很高时实际执行的任何代码.大约一个月前,这些服务被撕裂,寻找这个问题.分析了每个代码段,试图弄清楚我们的代码是否是问题; 我不是在这里问,因为我没有完成我的作业.如果这是服务工作比预期更多的简单案例,那就是本应该被捕获的东西.
这里的问题是,在大多数情况下,服务根本没有做任何事情,但仍然设法消耗四个CPU核心中的25%或更多:他们发现没有工作要做,并退出他们的循环并等待下一次迭代.从字面上看,这应该几乎不占用CPU时间.
以下是我们所看到的行为示例,该服务在两天内没有工作要做(在不变的环境中).这是上周捕获的:
第1天,上午8点:平均 CPU使用率约为3%
第1天,下午6点:平均 CPU使用率约为8%
第2天,上午7点:平均 CPU使用率约为20%
第2天,上午11点:平均 CPU使用率约30%
看了所有可能的世俗原因,我在这里问了这个问题,因为我认为(正确的,事实证明)我会得到更多创新的答案(比如Ubiguchi的),或指向我没有的东西'牛逼的思想(如伊恩的建议).
那么CPU尖峰是在定时器回调之前,定时器回调中,还是在定时器回调之后立即发生的?
你误会了.这不是一个尖峰.如果是的话,就不会有问题; 我可以处理尖峰.但它不是...... CPU使用率普遍上升.即使服务无所事事,等待下一次计时器命中.当服务启动时,事情很好而且平静,图表看起来像你期望的......通常,0%的使用率,当NHibernate点击数据库或服务做了一些微不足道的工作时,峰值达到10% .但是在流程运行的过程中,这种情况一直增加到25%(更多,如果我让它走得太远).
这使得伊恩的建议成为逻辑银弹(当你不看的时候,NHibernate会做很多事情).唉,我已经实现了他的解决方案,但它没有产生影响(我没有证据证明这一点,但我实际上认为它使事情变得更糟......平均使用率似乎现在上升得更快).请注意,剥离NHibernate"部分"(如您所推荐)是不可行的,因为这将剥离服务中大约90%的代码,这将让我排除计时器作为一个问题(我绝对打算尝试),但不能帮助我排除NHibernate作为问题,因为如果NHibernate导致这个,那么实施的狡猾的修复(见下文)将必须成为系统的工作方式; 我们如此依赖NHibernate进行这个项目,PM根本不会接受它导致无法解决的结构问题.
我只是在问题中注意到一种绝望感 - 你的问题会继续阻止一个小小的奇迹
不要故意让它脱离这种方式.目前,服务正在每天重新启动(可选择输入一天中的任意小时数,以便关闭和重新启动),这可以解决问题,但一旦进入生产机器就不能成为长期解决方案并开始变得忙碌.问题不会继续,无论我修复它们还是PM都会对它们保持这种约束.显然,我更愿意实现一个真正的修复,但由于最初的测试显示没有理由,并且服务已经被广泛审查,因此PM宁愿让它们重新启动多次,而不是花费更多的时间来修复它们.这完全超出了我的控制范围,使你所说的奇迹比其他方式更重要.
这是非常有趣的(只要您信任您的探查器).
我不.但是,这些是在Windows 2000机器上运行的Windows服务,由一个狡猾的Nant脚本部署,使用旧版本的NHibernate进行数据库访问.我真的说我相信那台机器很少.
有关订阅/取消订阅活动的最佳实践规则是否适用于asp.net?
我知道这可能看起来像一个愚蠢的问题,但是当我想到它时,我从未真正看到任何人们首先在页面上订阅事件然后在Web请求中取消订阅的代码.
示例1:在页面上,在Page_Load方法中,我订阅了ListView上的更新事件.我是否应该稍后取消订阅该事件,例如在OnPreRenderComplete方法中?
示例2:在被动视图模式中,视图(页面控件/用户控件)将在需要演示者执行任何操作时引发事件.因此,演示者需要订阅视图中的事件,但是还需要再次取消订阅事件吗?
最好的问候,埃吉尔.
假设我正在尝试将xml反序列化到我的类中,如果任何值为null或为decimal或datetime为空,那么如何处理null.
[XmlElement(ElementName = "Salary" , typeof(double))]
public string Salary { get; set; }
[XmlElement(ElementName = "BirthDate" , typeof(DateTime))]
public string Phone { get; set; }
Run Code Online (Sandbox Code Playgroud)
假设如果BirthDate或Salary在xml中为null或为空,那么在反序列化时如何处理它.需要解决方案 谢谢.
我的代码需要确定特定进程运行了多长时间。但它继续失败,并在Process.StartTime请求中显示拒绝访问的错误消息。这是一个使用用户凭据运行的进程(即,不是高特权进程)。这里显然是一个安全设置或策略设置,或东西,我需要解决这个问题,因为我不能相信的开始时间属性在框架刚刚以便它可以失败的100%的时间来摆弄。
Google 搜索表明我可以通过将运行查询代码的凭据的用户添加到“性能日志用户”组来解决此问题。但是,这台机器上不存在这样的用户组。
我对C#了解很多,但是这个让我感到困惑,谷歌没有帮助.
我有一个IEnumerable范围的对象.我想在第一个上设置一个属性.我这样做,但是当我在修改后枚举对象范围时,我看不到我的变化.
这是问题的一个很好的例子:
public static void GenericCollectionModifier()
{
// 1, 2, 3, 4... 10
var range = Enumerable.Range(1, 10);
// Convert range into SubItem classes
var items = range.Select(i => new SubItem() {Name = "foo", MagicNumber = i});
Write(items); // Expect to output 1,2,3,4,5,6,7,8,9,10
// Make a change
items.First().MagicNumber = 42;
Write(items); // Expect to output 42,2,3,4,5,6,7,8,9,10
// Actual output: 1,2,3,4,5,6,7,8,9,10
}
public static void Write(IEnumerable<SubItem> items)
{
Console.WriteLine(string.Join(", ", items.Select(item => item.MagicNumber.ToString()).ToArray()));
}
public class SubItem
{
public string …Run Code Online (Sandbox Code Playgroud) 我有登录页面的问题.如果我不输入用户名或密码,它应该说"请输入一个用户名或密码"而不是它去目的地页面我的意思是没有在登录字段输入任何东西如果我点击提交按钮它将欢迎页面实际上哪个不应该发生.
这是我的代码请有人告诉我我的错误在哪里:
public class Login
{
public string str = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString.ToString();
public int GetLogin(string UserName, string Password)
{
SqlConnection con = new SqlConnection(str);
SqlDataAdapter da = new SqlDataAdapter("select * from Login where UserName='"+UserName+"' and Password='"+Password+"'",con);
DataSet ds = new DataSet();
da.Fill(ds);
if (ds.Tables[0].Rows.Count > 0)
{
if ((ds.Tables[0].Rows[0].ItemArray[0].ToString() == UserName) && (ds.Tables[0].Rows[0].ItemArray[1].ToString() == Password))
{
return 1;
}
else
{
return 0;
}
}
else
{
return -1;
}
}
Login.aspx.cs:
protected void BtnLogin_Click(object sender, EventArgs e)
{
Session["UserName"] = …Run Code Online (Sandbox Code Playgroud) c# ×4
asp.net ×3
.net-1.1 ×2
.net ×1
events ×1
ienumerable ×1
login ×1
nhibernate ×1
sql-server ×1