【发布时间】:2012-12-11 23:24:03
【问题描述】:
给定以下代码:
if (!string.IsNullOrEmpty(link1))
{
string[] link1_ar = link1.Split(sep, StringSplitOptions.None);
string page1 = link1_ar[1];
string filter1 = link1_ar[2];
string code2 = link2_ar[3];
MyMethod(summary, page1, filter1, code1);
}
if (!string.IsNullOrEmpty(link2))
{
string[] link2_ar = link2.Split(sep, StringSplitOptions.None);
string page2 = link2_ar[1];
string filter2 = link2_ar[2];
string code2 = link2_ar[3];
MyMethod(summary, page2, filter2, code2);
}
if (!string.IsNullOrEmpty(link3))
{
string[] link3_ar = link3.Split(sep, StringSplitOptions.None);
string page3 = link3_ar[1];
string filter3 = link3_ar[2];
string code3 = link3_ar[3];
MyMethod(summary, page3, filter3, code3);
}
private void MyMethod(ref string summary, string bid_page, string bid_filter, string bid_code, string bid_silver)
{
bla bla bla
}
我想同时运行三个 MyMethod!
为了达到这个目的,我应该在这些代码中进行哪些更改?
【问题讨论】:
-
这在很大程度上取决于 MyMethod 内部的内容,以及它是否是线程安全的。
-
既然您已经指定这是 ASP.NET,您是否打算阻塞当前页面响应线程,直到所有三个
MyMethod后台调用完成? -
考虑到
summary作为ref传递给他们每个人,很可能MyMethod修改了summary,所以它目前不是线程安全的。将其切换到具有适当线程同步的StringBuilder,它可能没问题,但如果MyMethod中的大部分工作是字符串操作,那么在同步之外完成的工作将非常少,因此并行执行此操作几乎没有什么好处。 -
鉴于您迄今为止发布的信息,没有任何令人信服的理由相信将这段代码设为多线程会带来任何速度提升。
-
如果您的 .NET 代码比 PHP 中的等效代码慢,那么我怀疑您在这里做错了。
标签: c# asp.net .net-4.0 methods parallels