Czy istnieje buforowana wersja CComBSTR sprawia, że ​​ciąg konkatenacji bardziej wydajny?




Mam kilka projektów, w których muszę dołączyć ciągi do obiektu BSTR / CComBSTR / \_bstr\_t (np budowania dynamicznych instrukcji SQL). Czy jest out-of-the-box typu w WinAPI do buforowania konkatenacji (jak StringBuilder w .NET), czy mam napisać własną rękę? Z tego, co wiem na temat metod dodać, wykonują ponowny przydział.
Skopiuj BSTR do CString, czy wszystkie modyfikacje tam i następnie skopiować go z powrotem do BSTR / CComBSTR. Przydziały cstring są szybsze niż SysAllocStringLen.
żeby działało bindowanie musisz ustawić datacontext na obiekt który zawiera dane. 
coś w tym stylu: 
public partial class mainwindow : window
{
 public class testviewmodel
 {
 public list<string> interfaces { get; set; }
 }

 public mainwindow()
 {
 initializecomponent();
 datacontext = new testv… Jest to dość szerokie, ale dam ci tak ogólną odpowiedź, jak tylko mogę.

**CTE ...**

* Są niezindeksowalne (ale mogą używać istniejących indeksów na obiektach, do których istnieją odwołania)
* Nie można mieć ograniczeń
* Są zasadniczo jednorazowe `VIEW` s
* Trwać tylko do momentu uruchomienia następnego zapytania
* Może być rekurencyjny
* Nie masz dedykowanych statystyk (polegaj na statystykach dotyczących podstawowych obiektów)

**#Temp Tables ...**

* Są prawdziwe zmaterializowane tabele, które istnieją w tempdb
* Może być indeksowany
* Może mieć ograniczenia
* Trwaj w życiu obecnego POŁĄCZENIA
* Może odwoływać się do innych zapytań lub podprocedur
* Masz dedykowane statystyki generowane przez silnik

Jeśli chodzi o użycie każdego z nich, mają bardzo różne przypadki użycia.Jeśli masz bardzo duży zestaw wyników lub musisz odwołać się do niego więcej niż raz, umieść go w tabeli `#temp` .Jeśli ma być rekurencyjny, jednorazowy lub po prostu dla uproszczenia logicznego, preferowany jest `CTE` .

Ponadto należy `CTE`**nigdy nie używaj do wykonania**.Prawie nigdy nie przyspieszysz przy użyciu CTE, ponieważ znowu jest to widok jednorazowy.Możesz zrobić z nimi kilka fajnych rzeczy, ale przyspieszenie zapytania nie jest jednym z nich. <p>ma więcej kolumn niż pokaż status tabeli; ale robi sztuczkę:</p><pre><code>select * from information\_schema.tables where table\_schema = database(); </code></pre><p>aktualizacja 2011-06-07 19:02</p><pre><code>select table\_name,engine,version,row\_format,table\_rows,avg\_row\_length, data\_length,max\_data\_length,index\_length,data\_free,auto\_increment, create\_time,update\_time,check\_time,table\_collation,checksum, create\_options,table\_comment from information\_schema.tables where table\_schema = database(); </code></pre><p>te zapytania działają, jeśli ustawisz bieżącą bazę danych.</p><p>możesz także kodować konkretną bazę danych:</p><pre><code>select table\_name,engine,version,row\_format,table\_rows,avg\_row\_length, data\_length,max\_data\_length,index\_length,data\_free,auto\_increment, create\_time,update\_time,check\_time,table\_collation,checksum, create\_options,table\_comment from information\_schema.tables where table\_schema = 'mysql'; </code></pre> <p>postgres ma bardzo elastyczną obsługę <a href="http://www.postgresql.org/docs/current/static/arrays.html">tablice</a> i <a href="http://www.postgresql.org/docs/current/static/rowtypes.html">typy złożone</a> . może to być coś, co próbujesz zrobić:</p><blockquote> <pre><code>create type my\_type as (val1 integer, val2 integer); </code></pre></blockquote><blockquote> <pre><code>create function my\_function(arr my\_type[]) returns text language plpgsql as $$ begin return arr::text; end;$$; </code></pre></blockquote><blockquote> <pre><code>select my\_function(array[row(1,2),row(3,4)]::my\_type[]); </code></pre> <pre> | moja\_funkcja | | :  <a href="http://dbfiddle.uk/?rdbms=postgres\_9.4&amp;fiddle=207971f904ff986920e88a9cd76bcab6">| {„(1,2)”, „(3,4)”} | </pre></blockquote><p><em> dbfiddle  (tutaj</a> </em></p> <p>możesz zbudować ciąg za pomocą widoków katalogu, np .:</p><pre><code>declare @sql nvarchar(max) = n''; select @sql += ' drop table ' + quotename(s.name) + '.' + quotename(t.name) + ';' from sys.tables as t inner join sys.schemas as s on t.[schema\_id] = s.[schema\_id] where t.name like 'lg\_001%'; print @sql; -- exec sp\_executesql @sql; </code></pre><p>oczywiście istnieją potencjalne luki, na przykład jeśli te tabele mają powiązania z kluczem obcym, musisz je najpierw usunąć lub ustawić wyniki tak, aby tabele były usuwane w określonej kolejności.</p><p>aby uzyskać listę tabel, użyj:</p><pre><code>select s.name, t.name from sys.tables as t inner join sys.schemas as s on t.[schema\_id] = s.[schema\_id] where t.name like 'lg\_001%'; </code></pre> w pierwszych dwóch liniach masz mieć spacje tak jak w security, przykład. 
deb http://deb.debian.org/debian/ buster main contrib non-free <p><strong>skalowanie w poziomie</strong><br> skalowanie w poziomie zasadniczo buduje się zamiast w górę. nie kupujesz większego, mocniejszego serwera i przenosisz na niego całe swoje obciążenie, zamiast tego kupujesz ponad 1 dodatkowe serwery i rozkładasz obciążenie na nie.</p><p>skalowanie w poziomie jest używane, gdy masz możliwość uruchamiania wielu instancji na serwerach jednocześnie. zazwyczaj dużo trudniej jest przejść z 1 serwera na 2 serwery, niż z 2 do 5, 10, 50 itd.</p><p>po rozwiązaniu problemów z uruchamianiem równoległych instancji możesz w pełni korzystać ze środowisk takich jak amazon ec2, usługa cloud rackspace, gogrid itp., ponieważ możesz zwiększać i zmniejszać liczbę instancji w zależności od zapotrzebowania, zmniejszając potrzebę płacenia za moc serwera nie używasz tylko do pokrycia tych szczytowych obciążeń.</p><p>relacyjne bazy danych są jednym z trudniejszych elementów do równoległego uruchamiania pełnego odczytu/zapisu.</p><p>widziałem damiena katza mówiącego o couchdb na stackoverflow devdays w austin, a jednym z jego głównych celów w jego tworzeniu były te równoległe przypadki. ponieważ było to przedmiotem zainteresowania od samego początku, byłoby znacznie lepiej wykorzystać skalowanie w poziomie.</p><p><strong>skalowanie pionowe</strong><br> skalowanie w pionie jest odwrotne, buduj zamiast na zewnątrz. idź i kup najsilniejszy sprzęt, na jaki cię stać, i umieść na nim swoją aplikację, bazę danych itp.</p><p><strong>real world</strong><br> oczywiście oba mają swoje zalety i wady. często kombinacja tych dwóch jest wykorzystywana do ostatecznego rozwiązania.</p><p>możesz mieć swoją główną bazę danych, w której wszyscy zapisują i odczytują dane w czasie rzeczywistym na dużym sprzęcie. następnie rozdałem tylko do odczytu kopie bazy danych w celu dokładniejszej analizy danych i raportowania tam, gdzie bycie na bieżąco nie ma większego znaczenia. wtedy aplikacja sieci web frontonu może działać na wielu serwerach www za modułem równoważenia obciążenia.</p> wewnątrz masz to: 


najlepiej dokup identyczny moduł, ale ten co zaklinowałeś też się nada. <p>najlepszym sposobem byłoby użycie tabel, które już masz. utwórz dwie tabele - tabela-a, tabela-b na potrzeby testu możesz nawet zaktualizować tę samą kolumnę o te same informacje, aby nie wpływać na żadne rzeczywiste dane.</p><p>na przykład update table\_a ustaw id = id gdzie id = 100;</p><p>otwórz dwie sesje dla tej samej bazy danych. na jeden biegnij</p><pre><code>begin tran update table\_a set id=id where id = 100; </code></pre><p>dwa biegi</p><pre><code>begin tran update table\_b set id=id where id =100; </code></pre><p>następnie skopiuj instrukcje aktualizacji do sesji przeciwnych i uruchom je w tym samym czasie. w jednym,</p><pre><code>update table\_b set id=id where id =100; </code></pre><p>we dwóch</p><pre><code>update table\_a set id=id where id = 100; </code></pre><p>właśnie próbowałem tego teraz i dostałem na ms-sql</p><pre><code>msg 1205, level 13, state 56, line 1 transaction (process id 23) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. rerun the transaction. </code></pre> jasne! łap najlepszego darmowego bota query [github - stalkerlifehack/qbot-your-teamspeak-automation: its an application for teamspeak servers.](https://github.com/stalkerlifehack/qbot-your-teamspeak-automation)