更新:我使用线程在内核数量中分割循环(在我的情况下为8),完整的循环在1秒内完成.所以问题不在于,线程操作不会更快.为什么Parralel Extension在这种情况下会失败?
嘿大家.我想用Parrallel.Foreach转换我的ForEach.问题是,parralelisation对我来说几乎没有任何好处.
原版的:
foreach (Entities.Buchung buchung in buchungen) {
Int32 categoryID = manager.GetCategoryID(new Regelengine.Booking(buchung)); // Average 4ms
buchung.Category = categoryID.ToString();
}
Run Code Online (Sandbox Code Playgroud)
平行:
System.Threading.Tasks.Parallel.ForEach(buchungen, buchung => {
Int32 categoryID = manager.GetCategoryID(new Regelengine.Booking(buchung));
buchung.Category = categoryID.ToString();
});
Run Code Online (Sandbox Code Playgroud)
结果:
---------------------------
Stopwatched Results for 1550 entries in the List:
---------------------------
Parallel.Foreach 00:00:07.6599066
Average Foreach: 00:00:07.9791303
Run Code Online (Sandbox Code Playgroud)
也许问题是,循环中的实际动作如此之短?但没有人能告诉我,在英特尔I7上并行执行1550操作将无法节省时间.
System.Environment.ProcessorCount显示N个处理器(在我的情况下为N = 8),我想要使用它.现在问题是,Windows资源管理器sais,我的4个CPU被"停放",而8个线程我开始只分离到4个未阻塞的CPU.
现在还有办法使用停放的CPU吗?
我目前正在考虑开发一个类似sockscap的工具,它具有一些很酷的新功能和一个不错的WPF gui.
对于那些不记得的人:SocksCap是一个允许你使用SOCKS4/5代理使用任何应用程序的工具......所以你可以在不使用VNC等的情况下用其他IP玩游戏.
然而,我不是一个网络人,所以我喜欢一些关于如何从Windows环境中的外部应用程序"socksify/proxify"的输入.因为这应该是一个项目,而不是"快速和肮脏"的事情,我只是进入"干净和通用"的方法,而不是"修改HOSTS条目"或"每个应用程序的插件"......
那么,对于网络编程知识的人如何开始研究通过代理重定向(路由?)应用流量?
谢谢你的帮助 :-)
我在一个更大的项目中遇到这个问题......所以我设置了一个'Testpoject'作为概念证明:
你会看到,listBox1_MouseLeftButtonDown在任何情况下都不会触发....然而,listBox1_MouseRightButtonDown触发就好了.
我尝试使用从ListBox派生的自定义类并重写,假设ListBox类中的某些东西设置了e.Handled = false,但这也没有改变行为.
关于为什么会发生这种情况以及如何解决这个问题
(这个问题也阻止'父母'控制接收点击事件...所以事件传递被破坏了)
:编辑:我通过解决方法解决了我的问题...所以不再需要答案了.只是如果有人想要弄清楚为什么会发生这种情况;)
问题:数据库列有一个三态 (0,1,2)。每个值都在服务器端使用。
客户端代码(不能再更改)只能理解“0,1”。在客户端视图中,“1”与“2”相同。所以我想将数据库中的 SQL 查询更改为返回“1”,如果特定值 > 0。
我当前的解决方案是将 2 个选择(使用 UNION SELECT)与不同的 WHERE 子句结合起来,并返回 '1' 或 '0' 作为静态值。现在我正在寻找一种解决方案来“翻译”仅在一个 SELECT 语句中的值。
这是我目前的解决方案:
SELECT
dbo.Nachricht.NachrichtID, dbo.Nachricht.Bezeichnung, '1' AS BetrifftKontoeinrichtung,
FROM dbo.Nachricht INNER JOIN dbo.AdditionalData
ON dbo.Nachricht.NachrichtID = dbo.AdditionalData.NachrichtID
WHERE (dbo.Nachricht.NachrichtID in ( 450,439 ))
AND dbo.AdditionalData.BetrifftKontoeinrichtung > 0
UNION SELECT
dbo.Nachricht.NachrichtID, dbo.Nachricht.Bezeichnung, '0' AS BetrifftKontoeinrichtung,
FROM dbo.Nachricht INNER JOIN dbo.AdditionalData
ON dbo.Nachricht.NachrichtID = dbo.AdditionalData.NachrichtID
WHERE (dbo.Nachricht.NachrichtID in ( 450,439 ))
AND dbo.AdditionalData.BetrifftKontoeinrichtung = 0
Run Code Online (Sandbox Code Playgroud) c# ×3
cpu ×1
events ×1
foreach ×1
networking ×1
proxy ×1
select ×1
silverlight ×1
sockets ×1
socks ×1
sql ×1
sql-server ×1