我们遇到了sp的问题.
我们有一个非常简单的sp,它包含一个声明的表和几个外连接,最后返回20到100行.
因为查询这个sp一直给我们在生产和测试环境中表现不佳,所以我们最近重新编写了它以提高效率,并且在我们的测试环境中进行了彻底的测试.
我们将它发布到生产中只是为了发现它仍然很慢并导致我们的.NET 2.0应用程序在调用时超时.
我们什么都不懂,在生产数据库上进入Management Studio并在那里运行sp,它在1秒内执行.
也就是说,当从我们的应用程序运行时,它极其缓慢并导致超时,当从Management Studio运行时它非常快并且从不需要超过一秒钟.
任何对SQL Server 2005有深入了解的人都能给我们一个暗示吗?
我和一位同事为我们的客户设计了一个系统,我们认为我们创造了一个漂亮干净的设计.但是我遇到了一些我们引入的耦合问题.我可以尝试创建一个包含与我们的设计相同的问题的示例设计,但如果您原谅我,我将创建一个设计摘录来支持这个问题.
我们正在开发一种为患者注册某些治疗方案的系统.为了避免链接到图像,我将概念性UML类图描述为ac#样式类定义.
class Discipline {}
class ProtocolKind
{
Discipline;
}
class Protocol
{
ProtocolKind;
ProtocolMedication; //1..*
}
class ProtocolMedication
{
Medicine;
}
class Medicine
{
AdministrationRoute;
}
class AdministrationRoute {}
Run Code Online (Sandbox Code Playgroud)
我将尝试解释一下设计,协议是新治疗的模板.并且协议属于某种类型并且具有需要施用的药物.根据协议,对于相同的药物(以及其他事物),剂量可以不同,因此存储在ProtocolMedication类中.AdministrationRoute是药物的管理方式,与协议管理分开创建/更新.
我发现以下地方违反了得墨忒耳法则:
例如,在ProtocolMedication的业务逻辑中,存在依赖于药物的AdministrationRoute.Soluble属性的规则.代码将成为
if (!Medicine.AdministrationRoute.Soluble)
{
//validate constrains on fields
}
Run Code Online (Sandbox Code Playgroud)
列出某个学科中所有协议的方法将写成:
public IQueryable<Protocol> ListQueryable(Discipline discipline)
{
return ListQueryable().Where(p => (p.Kind.Discipline.Id == discipline.Id)); // Entity Frameworks needs you to compare the Id...
}
Run Code Online (Sandbox Code Playgroud)
我们使用ASP.NET(没有MVC)作为我们系统的接口,在我看来这个层目前有最严重的违规行为.gridview的数据绑定(必须显示协议的Discipline的列必须绑定到Kind.Discipline.Name),这是字符串,因此没有编译时错误.
<asp:TemplateField HeaderText="Discipline" SortExpression="Kind.Discipline.Name">
<ItemTemplate>
<%# Eval("Kind.Discipline.Name")%>
</ItemTemplate>
</asp:TemplateField>
Run Code Online (Sandbox Code Playgroud)
所以我认为实际的问题可能是,什么时候可以将其视为Demeter的建议,以及可以采取哪些措施来解决违反Demeter法的问题?
我对自己有一些想法,但我会将它们作为答案发布,以便他们可以单独评论和投票.(我不确定这是不是这样做的方法,如果没有,我会删除我的答案并将其添加到问题中).
我正在尝试从iPhone连接到远程mysql数据库.我搜索了很多网站,但我没有找到任何帮助.如果有人使用过这个,请发送解决方案.
我想在PHP中创建一个静态类,并使其行为与在C#中的行为相同,所以
这种东西......
static class Hello {
private static $greeting = 'Hello';
private __construct() {
$greeting .= ' There!';
}
public static greet(){
echo $greeting;
}
}
Hello::greet(); // Hello There!
Run Code Online (Sandbox Code Playgroud) 我对文本框进行了一些客户端验证,它只允许最多两个小数位的数字而没有其他输入.
此脚本仅用于输入数值,但需要进行调整以使其可以采用小数点后跟最多两位小数.
我尝试过这样的事情/[^\d].\d{0,2},但是替换电话不起作用,我不知道怎么做.
<script type="text/JavaScript">
function valid(f) {
if (!/^\d*$/.test(f.value)) {
f.value = f.value.replace(/[^\d]/g,"");
alert("Invalid number");
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
我需要匹配一个空字符串.如果提供了空字符串并且提交了表单,则该值默认为零.
我正在尝试检查我的mysql数据库information_schema以找出列的属性.我无法找到哪些列是auto_increment的详细信息.有谁知道我在哪里可以在information_schema数据库中找到这个信息?
假设您有一台也配有GPS接收器的Windows Mobile 6.0手机.WinMobile SDK是否支持访问GPS功能?
如果没有,使用GPS进行编程的选项(API)是什么,即编写将使用GPS功能的应用程序.我主要对Windows Mobile 6.x感兴趣,但也请包括通用回复.
我一定会投票给出最有帮助的答案.
提前致谢.
在我得到问题之前,有点(!)的背景知识:
我有一个手风琴控件加载了一个网格数组,每个网格都是延迟加载的数组.我正在使用自动生成的Web服务代理来检索这些列表.我希望用户能够更改手风琴中选定的孩子而无需等待Web服务响应.我最初对所有请求使用相同的代理实例,并按照它们的顺序跟踪请求,但问题是较短的数组从服务器返回得更快,因此请求的顺序变得无关紧要.
在处理代理结果事件时,我找不到一种明确的方法来确定原始请求,所以我最终得到的是一个处理手风琴上的change事件的函数,实例化一个新的webservice代理,将其推送到哈希表中.所选子项的索引,然后添加一个闭包作为事件处理程序.即有点像这样的东西:
private proxyTable:Object = new Object();
private function PopulateThingGrid(index:Number):void
{
var grid:ThingGrid = myAccordion.getChildAt(index) as ThingGrid;
grid.things = ArrayCollection(proxyTable[index].getThings_lastResult);
}
private function SendThingRequest(index:int):void
{
var grid:ThingGrid= myAccordion.getChildAt(index) as ThingGrid;
if (grid.things.length == 0)
{
if (proxyTable[index] == null)
{
proxyTable[index] = new MyWebServiceProxy();
}
var proxy:MyWebServiceProxy= proxyTable[index];
proxy.addgetThingsEventListener(function ():void { PopulateThingGrid(index); });
var list:ThingList = thingLists.getItemAt(index) as ThingList;
proxy.getThings("thinglist", list.ListID);
}
}
private function myAccordion_Change(event:IndexChangedEvent):void
{
SendThingRequest(event.newIndex);
}Run Code Online (Sandbox Code Playgroud)
(我试图对此进行匿名处理,所以我可能错过了一些东西,但希望你能得到这个想法)
那么,对于问题:是否有更简单的方法将代理结果与我刚刚遗漏的原始请求相匹配?
如果没有,我做得合理吗?我有点担心代理实例的数量,我可以最终生成然后正确处理它们(当有必要时) - 是否有任何我可能不知道的陷阱?
更新: 我认为问题可能出现,因为生成的代理代码从flash.events.Event而不是mx.rpc.events.ResultEvent继承ResultEvents.我不完全确定它为什么这样做 - 访问AsyncToken的唯一方法是它最初由方法调用返回.
SQL Server 2005在我经常使用的系统目录上有很棒的sys.XXX视图.
让我失望的是:为什么有一个"sys.procedures"视图来查看有关存储过程的信息,但是没有"sys.functions"视图来查看存储函数的相同信息?
没有人使用存储的功能吗?我发现它们对于例如计算列等非常方便!
是否有一个特定的原因缺少sys.functions,或者它只是被认为不足以放入sys目录视图的东西?它在SQL Server 2008中可用吗?
干杯,马克
如何在生产箱上部署Sql server报告?在本地它不是问题,我只是指定URL然后右键单击项目并说部署在我的本地服务器上.
但是生产服务器不会出现这种情况
sql ×3
sql-server ×3
mysql ×2
.net ×1
.net-2.0 ×1
actionscript ×1
apache-flex ×1
asynchronous ×1
cocoa-touch ×1
coupling ×1
database ×1
gps ×1
iphone ×1
javascript ×1
oop ×1
performance ×1
php ×1
regex ×1
static ×1
web-services ×1