我有以下代码,只是循环查找条件并将所有匹配放入一个新的集合:
ObservableCollection<Device> allDevices = GetAllDevices();
ObservableCollection<Device> matchingDevices = new ObservableCollection<Device>();
foreach (Device device in allDevices )
{
if (device.ID != 5)
matchingDevices .Add(device);
}
Run Code Online (Sandbox Code Playgroud)
很简单.我尝试将此转换为与Linq扩展方法结合使用的Lambda语句,但它失败了:
var matchingDevices = (ObservableCollection<Device>)allDevices.Where(d => d.ID != 5);
Run Code Online (Sandbox Code Playgroud)
这失败是因为它无法进行演员表演.我尝试附加.ToList(),但发生了同样的问题.听起来这应该很简单,但我找不到答案.
我希望用户拍照,然后打开附有照片的电子邮件对话框.到目前为止我得到了这个:
private void btnSubmitPhoto_Click(object sender, EventArgs e)
{
CameraCaptureTask cameraCaptureTask = new CameraCaptureTask();
cameraCaptureTask.Completed += cameraCaptureTask_Completed;
cameraCaptureTask.Show();
}
private void cameraCaptureTask_Completed(object sender, PhotoResult e)
{
if (e.TaskResult == TaskResult.OK)
{
currentImage = new BitmapImage();
currentImage.SetSource(e.ChosenPhoto);
EmailComposeTask ect = new EmailComposeTask();
}
}
Run Code Online (Sandbox Code Playgroud)
我没有看到如何向EmailComposeTask添加附件.我错过了什么吗?
我在工作中使用具有可怕UI的产品并试图通过Chrome中的UserScripts使其变得美味.为此,我试图通过UserScripts机制将JavaScript函数注入页面:
// find the div
var dropDown = document.getElementById("tstGlobalNavigation_ddlChooseProject");
// inject function
dropDown.innerHTML = dropDown.innerHTML + "<script>function gotoIncident(){alert('111')}</script>";
// inject a button
dropDown.innerHTML = dropDown.innerHTML + " <input type='button' name='btnSearch' value='Go' onClick='javascript:gotoIncident()' >";
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我正在注入一个按钮和一个函数(gotoIncident),当用户单击该按钮时它将触发.
按钮确实出现在屏幕上但是当我点击它时,javascript调试器告诉我gotoIncident没有定义.
我错过了什么?
有区别吗?我追随服务器的名称,即使它在一个实例上运行.
C#dev在这里,被迫处理Java ...我正在连接Java Web服务,这是相当大的内存和CPU.它.
事实:
时不时地,Web服务受到垃圾收集风暴的影响,并且会降低处理速度(由Java Web Service的供应商决定).
我的问题,对Java GC不太了解,这就是为什么如果有足够的RAM可用,GC就会启动.当剩下的内存很少时,是否有一些设置告诉它踢?
我的参考框架是.NET GC,只有在有内存压力时才会启动.
我们在一个运行调度算法的可笑的Linux机器上内部有第三方java应用程序.应用程序运行速度太慢,无法满足我们所需的负载.由于货币原因,我们没有代码,供应商也不会对应用程序进行任何更改,因此我无法改进代码.该应用程序是单线程的,其设计不适合并行化(因此我无法在2个盒子之间拆分负载).
无论是软件还是硬件,我能做些什么来提高应用程序的性能?
我有一个名为TIP-PBI.xltm的宏启用模板.当我基于此模板创建文档时,Excel会自动将其命名为TIP-PBI1.但是,我想给它一个自定义名称.
我想我可以通过修改工作簿的.Title属性来做到这一点.为此,在启动时,Workbook_Open事件开始,并执行以下操作:
Private Sub Workbook_Open()
Dim strPBI As String
strPBI = InputBox$("Enter PBI", "Enter PBI")
ThisWorkbook.Title = "TIP-PBI-" & strPBI
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,这没有任何作用.
如何在启动时更改文档的标题?
我有2个SQL查询,它们都获取不同ID的计数.
select @cntCM_CMQ = count(*)
from dbo.CaseWorkflow cw
join vew_CasePersonnelSystemIDs vcps on cw.ID_Case = vcps.ID_Case
join dbo.WorkflowStates ws on ws.ID_WorkflowState = cw.ID_WorkflowState
where CMSUID = @nSUID and ws.ID_WorkflowType = 3 -- CMQ
select @cntCM_PRWK = count(*)
from dbo.CaseWorkflow cw
join vew_CasePersonnelSystemIDs vcps on cw.ID_Case = vcps.ID_Case
join dbo.WorkflowStates ws on ws.ID_WorkflowState = cw.ID_WorkflowState
where CMSUID = @nSUID and ws.ID_WorkflowType = 1 -- PAPERWORK
Run Code Online (Sandbox Code Playgroud)
似乎我应该能够将它们组合成一个选择(可能带有一个CASE声明),但我似乎无法破解它.
我在.NET 4.51,C#Web服务上有一个工作单元,需要100毫秒.通常,Web请求包含10个单位的工作.因此,通过for循环顺序处理它需要大约一秒钟.
foreach (var u in unitsOfWork) {
Run(u);
}
Run Code Online (Sandbox Code Playgroud)
由于该盒子有12个CPU,我决定将工作拆分并同时运行,希望获得性能提升.我Parallel.ForEach以前做的工作:
Parallel.ForEach(unitsOfWork,u => {
Run(u);
});
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,每个工作单元平均花费425毫秒.所以最后我节省了约500毫秒的请求.看起来我应该能够获得更好的性能,看看这个盒子有12个CPU ......我错过了一些简单的东西吗?
我寻找任何共享的东西(可能会把它拿起来),但什么都没找到......所以我试着试验.我发出了2个工作单元的请求,每个工作大约需要125毫秒.有3个请求,每个单元需要150毫秒,依此类推.随后每个单位的数量,罚款约25至30毫秒.
所以要么我做错了什么......或者多线程只有固有的开销(没有意识到它是如此之大).
PS我也尝试用Thread.Join替换Parallel.For - 结果相同.
我正在使用来自第三方库的2个类,我们称之为Obj1和Obj2.它们具有几乎相同的集合属性和方法,节省了一些.两者都是独立的对象,不会从任何常见的东西继承.
问题是,在我的代码中,我必须为这两个对象提供2个路径,即使我对它们所做的工作是相同的.例:
void Foo1(Obj1 obj) {
obj.Cost = calcCostObj1(obj);
obj.Rate = generateRateObj1(obj);
... // 50 more lines of this
}
void Foo2(Obj2 obj) {
obj.Cost = calcCostObj2(obj);
obj.Rate = generateRateObj2(obj);
...
}
Run Code Online (Sandbox Code Playgroud)
当然,我可以重载方法,但它仍然是两种方法几乎每个操作...
不幸的是,我无法修改第三方库.在C#中是否有一种方法(不太可能,我知道),我可以在某种程度上将这两个类统一到一个接口中,这样我就不必有两种方法来处理所有事情.
或者至少使情况具体化.
PS我的梦想场景(目前C#无法实现):
void Foo<T>(T obj) where T: Obj1, Obj2 {
obj.Cost = calcCostObj<T>(obj);
obj.Rate = calcRateObj<T>(obj);
}
// calling code
Obj1 obj = new Obj1();
Foo<Obj1>(obj);
Run Code Online (Sandbox Code Playgroud) c# ×3
java ×2
jvm ×2
sql ×2
sql-server ×2
.net ×1
c#-4.0 ×1
email ×1
excel ×1
excel-2010 ×1
excel-vba ×1
javascript ×1
jdk1.6 ×1
lambda ×1
linq ×1
linux ×1
performance ×1
userscripts ×1
vba ×1