我有一个数据网格绑定到数据集,我想在页脚中显示填充整数的列的平均结果.
我的方式,有两种我能想到的方法:
1."使用Source,Luke"
在我调用DataGrid.DataBind()的代码中,使用DataTable.Compute()方法(或者在我的情况下使用DataSet.DataTable(0).Compute()).例如:
Dim strAverage = DataTable.Compute("Avg(ColumnName)", "")
Run Code Online (Sandbox Code Playgroud)
但是一旦我有这个,我怎么能把它插入页脚?
2." 为荣耀绑定 "
使用DataGrid.ItemDataBound事件,并计算每个ListItemType.Item和ListItemType.AlternatingItem的运行总计,最后显示在ListItemType.Footer中.例如:
Select Case e.Item.ItemType
Case ListItemType.Item, ListItemType.AlternatingItem
runningTotal += CInt(e.Item.Cells(2).Text)
Case ListItemType.Footer
e.Item.Cells(2).Text = runningTotal/DataGrid.Items.Count
End Select
Run Code Online (Sandbox Code Playgroud)
这只是感觉不对,而且我必须确保在每个DataBind上重置runningTotal.
有没有更好的办法?
我正在尝试实现.NET 4 helper/utility类,它应该根据webtesting工具的url列表检索HTML页面源.解决方案应该是可扩展的并且具有高性能.
我已经研究并尝试了很多天不同的解决方案,但找不到合适的解决方案.
根据我的理解,实现我的目标的最佳方法是使用使用TPL并行运行的异步webrequests.
为了完全控制标题等我正在使用HttpWebResponse而不是包装HttpWebResponse的WebClient.在某些情况下,输出应链接到其他任务,因此使用TPL任务可能有意义.
在经过许多不同的试验/方法之后,我迄今取得的成就,
实施基本同步,异步(APM)和并行(使用TPL任务)解决方案,以查看不同解决方案的性能级别.
为了查看异步并行解决方案的性能,我使用了APM方法,BeginGetResponse和BeginRead,并在Parallel.ForEach中运行它.一切都很好,我对表现感到满意.不知怎的,我觉得使用简单的Parallel.ForEach不是要走的路,例如我不知道如何使用任务链.
然后我尝试使用TaskCompletionSource和迭代器来迭代APM流程,使用包装APM解决方案的任务来完成更复杂的系统.我相信这个解决方案可能就是我正在寻找的,但有一个奇怪的延迟,在6-10秒之间,当运行500个网址列表时会发生2-3次.
根据日志,执行已返回到发生延迟时在循环中调用异步提取的线程.当执行移回循环时,延迟不会发生,只需2-3次,其他时候工作正常.看起来循环线程会创建一组由其他线程处理的任务,而大多数/所有任务都完成后,在循环继续创建剩余任务之前会有延迟(6-8s),其他线程再次处于活动状态.
迭代器内部循环的原理是:
IEnumerable<Task> DoExample(string input)
{
var aResult = DoAAsync(input);
yield return aResult;
var bResult = DoBAsync(aResult.Result);
yield return bResult;
var cResult = DoCAsync(bResult.Result);
yield return cResult;
…
}
Task t = Iterate(DoExample(“42”));
Run Code Online (Sandbox Code Playgroud)
我正在使用System.Net.Service.Manager.DefaultConnectionLimit解析连接限制并使用ThreadPool.RegisterWaitForSingleObject超时
我的问题很简单,实现帮助程序/实用程序类以检索html页面的最佳方法是:
如果您认为使用上面提到的APM,TaskCompletionSource和iterator的解决方案很好,我将不胜感激任何尝试解决延迟问题的帮助.
我对C#和Windows开发都很陌生,所以请不要介意我正在尝试的东西是不是太有意义.
任何帮助都将受到高度赞赏,因为没有得到解决我必须放弃我的测试工具开发.
谢谢
c# multithreading asynchronous httpwebrequest task-parallel-library
我看到了C#Code Contracts的一个很棒的演示,我想开始在may代码中实现它们.我希望我已经在我的代码中拥有它们了.一个人从哪里开始?
我没有带走演示中的任何印刷材料.有兴趣吗?
有关代码合同的初学者的任何建议?
在此先感谢您的帮助.
我正在创建一个程序,看看我是否可以在C#中运行一个字节数组.
该程序应该获取一个字节数组"MyBinaryData"并加载+运行它作为一个新程序.将有一个文本框,您可以在其中输入字节以查看结果(这是一个实验;)).我试过这个:
byte[] binaryData = System.IO.File.ReadAllBytes("MyBytes.txt"); // the bytes are in a .txt file for simple tests before becoming a textbox.
Assembly LoadByte = Assembly.Load(binaryData);
MethodInfo M = LoadByte.EntryPoint;
if (M != null)
{ object o = LoadByte.CreateInstance(M.Name);
M.Invoke(o, new Object[] { null }); // this gives the error
}
else {
..... fail code here....
}
Run Code Online (Sandbox Code Playgroud)
问题是它给出了这个错误:"System.Reflection.TargetInvocationException:......必须在应用程序中创建第一个IWin32Window对象之前调用SetCompatibleTextRenderingDefault."
我的第二个测试是:
Assembly assembly = Assembly.Load(binaryData);
Type bytesExe = assembly.GetType(); // problem: the GetType(); needs to know what class to run.
Object inst …Run Code Online (Sandbox Code Playgroud) 我刚刚学习了ASP.NET 2.0中的母版页.
它们听起来很棒,但它们在实践中的表现如何?
有没有人有在大型网站上使用它们的经验?
我有以下代码:
decimal? a = 2m;
decimal? b = 2m;
decimal c = a ?? 1m * b ?? 1m;
Run Code Online (Sandbox Code Playgroud)
由于双方a并b已填写,我希望c给我的结果4.
但是,我得到的结果是2,在这种情况下b取为1而不是2.
有谁知道这种行为背后的原因是什么?
我有以下代码用于记录我通过在线研究找到的Windows服务.它在我的服务类内部完成之前就像在下面初始化一样.
public GBBInvService()
{
InitializeComponent();
if (!System.Diagnostics.EventLog.SourceExists("MyLogSource"))
System.Diagnostics.EventLog.CreateEventSource("MyLogSource",
"MyDoLog");
eventLog1.Source = "MyLogSource";
eventLog1.Log = "MyDoLog";
}
Run Code Online (Sandbox Code Playgroud)
记录时的代码:
eventLog1.WriteEntry("GBBInvService Service Started");
Run Code Online (Sandbox Code Playgroud)
然而,我的顾问却反对我.他的评论如下:
我会避免让服务在运行时创建事件源.这要求服务以高权限运行(即,比实际需要更多地访问计算机).设置Windows事件日志源实际上是一个安装时间作业.您可以将事件日志安装程序添加到项目安装程序文件(以及服务安装程序),然后事件源将始终存在
这个建议的问题是我无法找到在项目安装程序文件中创建日志的任何示例.我还尝试将此日志创建部分移动到我的项目安装程序中,但之后它不会让我从我的Web服务cs页面调用或写入eventlog1.他还建议使用log4net,但这对我来说是一个新的东西,并且很难掌握.刚刚完成我的第一个Windows服务项目,我对Windows服务仍然很陌生,并且非常感谢在项目安装程序中创建日志的任何方向,从我的服务cs页面或在log4net上的任何抬头写入它.
我试图获得列表的所有预定义长度排列,仅按升序排列.
For example, take the set: "ABCDE"
I'd like the returning result to be:
ABC, ABD, ABE, ACD, ACE, ADE, BCD, BCE, BDE, CDE
Run Code Online (Sandbox Code Playgroud)
换句话说,"B"永远不会出现在"A"(升序)之前,但我想要满足这一要求中的每一个变化.
我不想使用LINQ,我正在试图找出实现这个的最快方法(速度是这个应用程序中的一个因素).
到目前为止,我有一个字符列表列表:
List<List<char>> Combinations;
Run Code Online (Sandbox Code Playgroud)
内部"List"将是"ABC"(每个字母为char)的组合,外部列表将是所有组合的列表.
每个结果集的长度(上例中为3)需要是动态的,所以我想我需要某种递归...我只是想不出如何实现它.
任何帮助将不胜感激!
编辑
到目前为止,这就是我所拥有的(我觉得我已经接近了......我只是无法让它真正构建最终列表(联盟不起作用 - 我使用它是不正确的?):
private List<List<char>> AscendingPermute(List<char> InMovements, int Combinations)
{
List<List<char>> Ret = new List<List<char>>();
for(int i = 0; i <= InMovements.Count - Combinations; i++)
{
if(Combinations <= 1){
Ret.Add(new List<char>() {InMovements[i] });
return Ret;
}
else
{
Ret.Union(AscendingPermute(InMovements.GetRange(1, InMovements.Count - 1), Combinations - 1));
}
} …Run Code Online (Sandbox Code Playgroud) 如果我在一个类的(非静态)成员函数中声明了一个静态变量,它对该类的每个实例是静态的,还是在所有实例中是静态的?对不起,如果答案显而易见,我无法在任何地方找到它.
编辑:
我接受了zerkms的回答,但这是另一个例子:
<?php
class X {
public function fun($bar) {
static $foo = null;
if ($foo != null) print $foo . "<br/>";
$foo = $bar;
}
}
$x1 = new X();
$x1->fun(42);
$x2 = new X();
$x2->fun(123);
$x2->fun(666);
?>
Run Code Online (Sandbox Code Playgroud)
产出:
42
123
有没有办法可以用现有项目初始化类中的列表?
我基本上想要实例化一个类对象并初始化一个列表,其中包含现有和新项目中已有的一些元素.
public class Item
{
public string Property {get; set;}
}
public class MyClass
{
public virtual IEnumerable<Item> Items {get; set;}
}
var itemToAdd = context.Items( i => i.Property == "Desired" );
MyClass myclass = new MyClass()
{
Items = new List<Item>()
{
new List<Item> (),
{
Property = "New"
},
// Would like itemToAdd to be added here when I create a new List.
}
};
Run Code Online (Sandbox Code Playgroud)