我需要你的专业人士/大师的确认/解释,因为我的团队告诉我"这没关系",这让我感到很沮丧:)
背景:我们的主要MVC3/.Net4 Web应用程序正在使用SQL Server 2008.我们在任何给定点上都有大约200多个并发用户.服务器受到极大的打击(锁定,超时,整体缓慢),我正在尝试应用我在整个职业生涯和最后一次MS认证课程中学到的东西.他们是我们所有人都在钻的东西("关闭SQL连接STAT"),我试图向我的团队解释这些"小东西",虽然不是唯一一个有所作为,但最终还是加起来.
我需要知道以下是否会对性能产生影响,或者它是否只是"最佳实践"
1.使用"USING"关键字. 他们的大部分代码都是这样的:
public string SomeMethod(string x, string y) {
SomethingDataContext dc = new SomethingDataContext();
var x = dc.StoredProcedure(x, y);
}
Run Code Online (Sandbox Code Playgroud)
虽然我试图告诉他们USING会更快地关闭/释放资源:
using (SomethingDataContext dc = new SomethingDataContext()) {
var x = dc.StoredProcedure(x, y);
}
Run Code Online (Sandbox Code Playgroud)
他们的论点是GC在代码执行完毕后做了很好的清理工作,因此USING没有产生巨大的影响.是真还是假?为什么?
2.连接池
我一直听说设置连接池可以显着加快任何网站(至少.Net w/MSSQL).我建议我们在web.config中的connectiontring中添加以下内容:
..."Pooling = True; Min Pool Size = 3; Max Pool Size = 100; Connection Timeout = 10;"......
他们的论点是.Net/MSSQL已经在幕后设置了连接池,没有必要放入我们的web.config.对或错?为什么每个其他网站都说如果已经设置了池,那么应该添加池以获得最佳性能?
3.最小化对DB的调用次数
默认的.Net MVC项目附带的角色/成员资格提供程序很不错 - 它非常方便,可以为您完成大部分工作.但是这些人正在认真UsersInRoles()地使用它并像一个全局变量一样自由地使用它(每次调用这个方法时它就会击中数据库).我创建了一个"用户对象",它在每个页面加载(以及其他一些用户的东西,如GUID等)上预先加载所有角色,然后查询该对象是否具有该角色.
该网站的其他部分有FOR语句循环超过200次,并在每次传递=超过4,000个数据库调用时执行20-30个sql查询.它以某种方式在几秒钟内完成,但我想要做的是将20-30个DB调用合并为一个,这样它就可以进行200次调用(每个循环).但是因为SQL分析器说查询花了"0秒",所以它们的论点是它如此快速和小,以至于服务器可以处理这些大量的数据库查询.
我的想法是"是的,这些查询运行速度很快,但它们会破坏整个SQL服务器的性能." 这可能是一个促成因素吗?我是否担心什么,或者这是服务器整体性能问题的重要因素?
4.其他代码优化
首先想到的是使用StringBuildervs一个简单的字符串变量.我理解为什么我应该使用StringBuilder(特别是在循环中),但是他们说这没关系 - …
我花了最近两天试图找出如何在LINQ中进行真正的LEFT JOIN并且我没有成功.我有一个用户表,其中有一个"Primary2Address"列,可能并且通常为NULL.所以我必须在这里做LEFT JOIN.另外,在Address表中,我有更多可能为NULL的关系,所以我必须做多个LEFT JOINS.
每次LINQ尝试我都会用UNIONS输出一些严重的CRAZY sql语句,嵌套的SELECT语句和更古怪的东西.
我只需要:
SELECT u.UserName FROM Users u
LEFT JOIN Addresses a ON a.AddressiD = u.Primary2Address
LEFT JOIN States s ON s.StateID = a.Address2State
LEFT JOIN Countries c ON c.CountryID = a.CountryID
Run Code Online (Sandbox Code Playgroud)
请帮忙!到目前为止,我的解决方法是创建一个使用上面的sql语句的存储过程,但我真的想尝试使用LINQ(L2E).多谢你们!
我填写这个清单:
<ul id="FolderList"></ul>
Run Code Online (Sandbox Code Playgroud)
使用jquery生成以下HTML的文件夹列表:
<ul id="FolderList">
<li id="FolderList0" onclick="return myFunc(0)">Item 1</li>
<li id="FolderList1" onclick="return myFunc(1)">Item 2</li>
<li id="FolderList2" onclick="return myFunc(2)">Item 3
<ul>
<li id="FolderList2a" onclick="return myFunc(2a)">Sub Item 1</li>
<li id="FolderList2b" onclick="return myFunc(2b)">Sub Item 2
<ul>
<li id="FolderList2bi" onclick="return myFunc(2bi)">Subsub Item 1</li>
</ul>
</li>
</ul>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
...
function myFunc(id) {
//do something
Run Code Online (Sandbox Code Playgroud)
返回false; };
出于某种原因,如果我点击1级li项,函数myFunc()将按预期执行.如果我点击"2级"项目(即:FolderList2a),则会调用myFunc两次.如果我点击第3级(即:FolderList2bi),它会被调用3次 - 依此类推.谁知道这里发生了什么?!提前致谢!
提交表单时,表单"滑出"并使用$.get(),我加载另一页并将其滑入.在隐藏表单和下一页的显示之间,div崩溃,我的所有页脚内容都会短暂结束形式在哪里.
然后,当"下一页"完成加载时,页脚返回到底部(在新页面内容下).因为表单的大小可能会有很大变化,我试图避免为DIV指定高度.
有没有办法防止div改变?
码:
$("#MyForm").hide("slide", { direction: "left" }, 250, function () {
$.get("../NewPage.html", function (data) {
$("#NewPagePlaceholder").html(data);
$("#NewPagePlaceholder").show("slide", { direction: "right" }, 250);
});
});
Run Code Online (Sandbox Code Playgroud) 我有一个页面使用jquery的自动完成功能,对于我的生活,我无法删除/修改应用于下拉列表的样式.
我正在使用谷歌CDN的jquery-ui CSS,所以我试图避免在本地保存并修改它:)
使用CSS,我尝试重写UL(.ui-autocomplete),LI(.ui-menu-item)和LI中的锚标签 - 我有很多工作,但似乎添加了填充在我的CSS之后,当我将鼠标从列表项移到下一个项目上时,一瞬间,前一个项目具有默认的jquery-ui背景(标题中使用的灰色渐变,例如对话框标题栏) .
任何人都有css方便重置自动完成样式?
*更新* 链接到小提琴:
[http://jsfiddle.net/HccBe/][1]
Run Code Online (Sandbox Code Playgroud)
如果将鼠标悬停在其中一个项目上,则会以蓝色突出显示.然后将鼠标移动到它的左侧,但仍然在下拉框中,你会注意到蓝色消失了,但jquery的渐变背景仍然存在.
我正在创建一个报告工具,用户可以在其中选择一个运算符和2个值进行过滤.
我的基本表:
UserID UserName
-------------------------------
1 User1
2 User2
3 User3
4 User4
5 User5
Run Code Online (Sandbox Code Playgroud)
用户可以选择我想要翻译的运算符,如下所示:
Option SQL Operator
------------------------------
between column between x and y
like column '%' + x + '%'
greater than column > x
less than column < x
equal to column = x
not equal to column <> x
Run Code Online (Sandbox Code Playgroud)
我在想类似的东西:
... column = ISNULL(@parameter, column)
Run Code Online (Sandbox Code Playgroud)
从某种意义上说,如果你传递的东西或什么都没有,它仍然会正确查询.
这是我正在玩的TSQL(**不工作*):
declare @bwValue1 varchar(200) = '2', --between value 1
@bwValue2 varchar(200) = '4'; --between value 2
select …Run Code Online (Sandbox Code Playgroud) 我有两个完全不相关的表,我需要把它们放在一起 - 每个表一列.当我尝试笛卡尔联合时,我最终得到了所有组合:
SELECT Field1, Field2 FROM Table1, Table2
Run Code Online (Sandbox Code Playgroud)
结果:
Table1.Field1 Table2.Field2
---------------------------
1 1
1 2
1 3
2 1
2 2
2 3
3 1
3 2
3 3
Run Code Online (Sandbox Code Playgroud)
我需要它并排返回:
Table1.Field1 Table2.Field2
---------------------------
1 1
2 2
3 3
Run Code Online (Sandbox Code Playgroud)
这可能吗?提前致谢
编辑
Table1.Table1IDs
----------------
1
2
3
4
5
Table2.Table2IDs
----------------
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)
期望的输出(进入临时表/选择语句)
Table1.Table1IDs Table2.Table2IDs
------------------------------------
1 6
2 7
3 8
4 9
5 10
Run Code Online (Sandbox Code Playgroud)
这样我就可以将插入到实际的表中,我需要进行插入:
INSERT INTO dbo.MTMObjects
SELECT Table1IDs, Table2IDs
FROM [temp …Run Code Online (Sandbox Code Playgroud) 我怎么转这个:
string x = "key:value|key:value|key:value|key:value";
Run Code Online (Sandbox Code Playgroud)
进入这个?
List<myClass> listObj;
Run Code Online (Sandbox Code Playgroud)
myClass定义:
public class myClass
{
public string keyName { get; set; }
public string keyValue { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
必须有一种方法来使用LINQ或其他东西:)提前感谢!
*注意* 我应该添加我知道如何分割它并循环它,但必须有一个更好的方法:)
我已经完成了一些新的HTML5标签,并阅读了W3cschools等所有新标签,我有点困惑.
如果我创建一个使用"区域","部分","旁白"等的HTML页面,那么什么都没发生?我必须手动设置它们 - 这很精细,但我错过了什么?如果我必须使它成为ASIDE(常见的css:float:right; width:30%,sorta thing),那么将标签声明为"旁边"是什么意思?
为什么不留下DIV标签并设计它们?
我还注意到了新的属性,比如"draggable",但是,惊喜惊喜,它不会拖累!我必须编写它来拖动(javascript/jquery ??)?宣布它是否可以拖延有什么意义?我可以创建一个div标签并使用JQuery拖动它,所以有人请赐教我关于html5的那些"哎呀呀呀呀"?
sql-server ×3
.net ×2
c# ×2
html5 ×2
javascript ×2
jquery ×2
linq ×2
t-sql ×2
asp.net-mvc ×1
css3 ×1
html ×1
jquery-ui ×1
sql ×1